Вы можете использовать пакетный скрипт и установить в нем три переменные, одна из которых является путем к корневому исходному каталогу, который будет проходить для определенных файлов, вторая - путь назначения, куда будут скопированы новые файлы, а третья - файл. список имен файлов, которые вы хотите скопировать в каталог назначения.
С этими тремя переменными вы можете использовать цикл FOR /R
для обхода исходного местоположения и использовать условную логику IF
чтобы проверить, существуют ли уже файлы для какой-либо операции копирования или удаления, которую необходимо выполнить с каждым файлом. Кроме того, вы можете использовать CALL
и подстановки переменных для передачи частей имени файла в другую подпрограмму и использовать дополнительную логику IF
вместе с SET /A
для увеличения числа повторяющихся файлов и т.д.
Пакетный скрипт
@ECHO OFF
SET "source=C:\Folder_Source"
SET "dest=C:\Destination"
SET "FileList=file1.txt file2.txt file8.txt"
SET "dupCnt=1"
FOR /R "%source%" %%A IN (%FileList%) DO (
IF NOT EXIST "%dest%\%%~NXA" (
XCOPY /F /Y "%%~FA" "%dest%\" && IF EXIST "%%~FA" DEL /Q /F "%%~FA"
) ELSE (
CALL :DupeRoutine "%%~FA" "%%~NA" "%%~XA"
)
)
GOTO :EOF
:DupeRoutine
IF EXIST "%dest%\%~2_(%dupCnt%)%~3" (
SET /A dupCnt=%dupCnt%+1
CALL :DupeRoutine "%~1" "%~2" "%~3"
) ELSE (
IF NOT EXIST "%dest%\%~2_(%dupCnt%)%~3" ECHO F | XCOPY /Y /F "%~1" "%dest%\%~2_(%dupCnt%)%~3" && DEL /Q /F "%~1"
SET "dupCnt=1"
)
GOTO :EOF
Результаты
Примечание. Если вы хотите, чтобы дублирующиеся имена файлов использовали другое соглашение об именах, отличное от _(#)
я использовал, вам нужно изменить _(%dupCnt%)
в сценарии в пределах "%dest%\%~2_(%dupCnt%)%~3"
для любого другого формата, который вы хотите использовать, но %dupCnt%
- это число, которое будет увеличиваться. Я тоже рад помочь в этом.
Источник до
D:\Folder_Source
│ file1.txt
│ file2.txt
│ file4.txt
│ file8.txt
│ file99.txt
│
├───FolderA
│ file1.txt
│ file2.txt
│ file4.txt
│ file8.txt
│ file99.txt
│
└───FolderB
file1.txt
file2.txt
file4.txt
file8.txt
file99.txt
Направление после
C:\Destination
file1.txt
file1_(1).txt
file1_(2).txt
file2.txt
file2_(1).txt
file2_(2).txt
file8.txt
file8_(1).txt
file8_(2).txt
Источник После
D:\Folder_Source
│ file4.txt
│ file99.txt
│
├───FolderA
│ file4.txt
│ file99.txt
│
└───FolderB
file4.txt
file99.txt
Дополнительные ресурсы
- FOR /R
- ЕСЛИ
- XCOPY
- DEL
ВЫЗОВ
Пакетные замены (ЗА /?)
Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~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"