Пакетное решение сценария
Вы можете установить в качестве переменной родительскую папку, содержащую все файлы в структуре, которые необходимо скопировать в родительскую папку. Затем вы можете использовать для / г цикла и условного , если логика и переменные подстановки для выполнения копирования, удаления и операции создания папки расширения файла по мере необходимости.
Вы можете использовать некоторую условную логику, чтобы проверить, существует ли файл для копирования, уже существует в целевой папке, и если это так, то вызовите подпрограмму и передайте ей замены переменных, чтобы добавить _(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"