Пакетное решение сценария
Вы можете установить в качестве переменной родительскую папку, содержащую все файлы в структуре, которые необходимо скопировать в родительскую папку. Затем вы можете использовать для / г цикла и условного, если логика и переменные подстановки для выполнения копирования, удаления и операции создания папки расширения файла по мере необходимости.
Вы можете использовать некоторую условную логику, чтобы проверить, существует ли уже копируемый файл в папке назначения, и если это так, то вызовите подпрограмму и передайте ей подстановки переменных, чтобы добавить _(dupe)
к этому имени файла, чтобы он не перезаписывал существующие файлы с тем же имя файла.
Чтобы быстро удалить пустые директории в папке родительского можно запустить Robocopy
такую команду, Robocopy <dest> <dest> /S /MOVE
где destination
и source
параметры оба одинаковы и равны полный путь родительской папки.
Пакетный скрипт
@ECHO OFF SET "Parent=C:\Momma" SET "dupCnt=1" FOR /R "%Parent%" %%C IN (*) DO ( IF NOT EXIST "%Parent%\%%~XC" MD "%Parent%\%%~XC" IF NOT EXIST "%Parent%\%%~XC\%%~NXC" ( XCOPY /Y /F "%%~C" "%Parent%\%%~XC\" && DEL /Q /F "%%~C" ) ELSE ( CALL :Routine "%Parent%\%%~XC\%%~NXC" "%%~C" "%%~NC" "%%~XC" ) ) Robocopy "%Parent%" "%Parent%" /S /MOVE GOTO :EOF :Routine IF EXIST "%Parent%\%~4\%~3_(dupe%dupCnt%)%~4" ( SET /A dupCnt=%dupCnt%+1 CALL :Routine "%~1" "%~2" "%~3" "%~4" ) ELSE ( IF EXIST "%~1" ( ECHO F | XCOPY /Y /F "%~2" "%Parent%\%~4\%~3_(dupe%dupCnt%)%~4" && DEL /Q /F "%~2" SET "dupCnt=1" ) ) GOTO :EOF
Пример структуры папок до и после
До
C:\MOMMA ├───Adult-Child │ Adult-Child.jpg │ Adult-Child.txt │ Adult-Child.zzz │ Baby.txt │ ├───Baby │ Adult-Child.txt │ Baby.jpg │ Baby.txt │ Baby.zzz │ Teen.txt │ └───Teen Adult-Child.txt Baby.txt Teen.jpg Teen.txt Teen.zzz
После
C:\MOMMA ├───.jpg │ Adult-Child.jpg │ Baby.jpg │ Teen.jpg │ ├───.txt │ Adult-Child.txt │ Adult-Child_(dupe1).txt │ Adult-Child_(dupe2).txt │ Baby.txt │ Baby_(dupe1).txt │ Baby_(dupe2).txt │ Teen.txt │ Teen_(dupe1).txt │ └───.zzz Adult-Child.zzz Baby.zzz Teen.zzz
Дополнительные ресурсы
- FOR / R
- ЕСЛИ
- Мэриленд
- XCOPY
- DEL
ВЫЗОВ
Пакетные замены (ЗА /?)
Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:
%~I - expands %I removing any surrounding quotes (") %~nI - expands %I to a file name only %~xI - expands %I to a file extension only
ЗАДАВАТЬ
Арифметические выражения (SET / a)
Поместить выражения в «кавычки» необязательно для простой арифметики, но необходимо для любого выражения, использующего логические операторы.
Любое SET /A
вычисление, которое возвращает дробный результат, будет округлено до ближайшего целого числа.
Выражение для оценки может включать следующие операторы:
+ Add set /a "_num=_num+5"