Я использую инструмент обработки изображений, который может обработать вывод в пакетном режиме различные размеры того же изображения в форму каталога:
<specific directory>\<image size name>
e.g. SuperBowl\Fullsize JPEG
Я хотел бы обычно инвертировать это и переместить любые файлы в подпапке к новому местоположению, т.е.:
<image size name>\<specific directory>
e.g. Fullsize JPEG\SuperBowl
Я предусмотрел бы выполнять операцию против Superbowl
папка. Существует ли простой инструмент, доступный, который может сделать это, или Windows .bat или сценарий удара Linux?
Я думаю, что что-то вроде этого должно работать:
for /d %x in (*) do for /d %y in ("%x\*") do md "%~ny"
for /d %x in (*) do for /d %y in ("%x\*") do md "%~ny\%x"
for /d %x in (*) do for /d %y in ("%x\*") do move "%x\%~ny\*" "%~ny\%x"
Первые две строки создают инвертированный набор каталога, третьи перемещения все. При помещении этого в пакетный файл необходимо удвоить символы %.
Вполне уверенный Вам не нужна первая строка, поскольку MKDIR, кажется, создает промежуточные каталоги автоматически, но я не делаю с тех пор сколько времени.
2-е и 3-и строки Hafthor около достаточно добиваются цели, но я хотел смочь указать, что каталог так изменил их, чтобы быть:
for /d %%x in ("%1") do for /d %%y in ("%%x\*") do md "%%~ny\%%x"
for /d %%x in ("%1") do for /d %%y in ("%%x\*") do move "%%x\%%~ny\*" "%%~ny\%%x"
На самом деле я пошел немного далее, и разработайте следующий сценарий - я не беру на себя ответственности вообще ни за какую странность / нежелательное удаление файлов, которые могут произойти; выполнение на Ваш собственный риск:
@echo off
if [%1]==[] goto noparameter
if "%1"=="*" goto nowildcards
if "%1"=="/?" goto help
if not exist %1 (
echo The directory does not exist.
goto exit
)
echo.
echo Creating new directories...
for /d %%x in ("%1") do for /d %%y in ("%%x\*") do md "%%~ny\%%x"
echo.
echo Moving files...
for /d %%x in ("%1") do for /d %%y in ("%%x\*") do move "%%x\%%~ny\*" "%%~ny\%%x"
echo.
echo Files were flipped for directory %1; this directory now contains (should be empty):
dir %1 /S /B
echo.
echo =======================================================================
echo The previous (sure it's empty?) directory structure will now be deleted
echo.
if "%2"=="/F" (
echo Deletion forced
rmdir %1 /S /Q
) else (
rmdir %1 /S
)
goto exit
:noparameter
echo You must specify a directory to flip.
goto exit
:nowildcards
echo You cannot use a wildcard (asterisk) with this script.
goto exit
:help
echo Takes directory structure a/b and converts it to b/a, moving any files within.
echo Works only with a single directory when you are within its parent.
echo.
echo FLIP [directory] [/F]
echo.
echo. /F Force deletion of directory structure without prompt
goto exit
:exit
Я не знаю пакетные сценарии, но это - вероятно, общая процедура, которую Вы хотели бы использовать:
И, мм... вот именно, я предполагаю. Не слишком сложный на данный момент.