@echo off
setlocal
set "source=L:\an_2017\image_list.txt"
set "target=L:\an_2017"
for /f "delims=" %%A in (%source%) do (
if not exist "%target%\%%~nxA" (
copy "%%~A" "%target%\%%~nxA"
) else (
call :index "%%~A" "%target%\%%~nxA" "1"
)
)
exit /b
:index source, target, count
setlocal
set /a "cnt=%~3"
if exist "%target%\%~n2(%cnt%)%~x2" (
call :index "%~1" "%~2" "%cnt%+1"
) else copy "%~1" "%target%\%~n2(%cnt%)%~x2"
Исходный файл читается построчно.Если файл не найден в целевой папке, то копирование выполнено.Если файл найден в цели, то метка :index
вызывается с аргументами источника, цели и счетчиком 1.
В вызываемой метке cnt
устанавливается значение счетчика,Если индексированный файл не найден в целевом объекте, выполняется копирование.Если найдено в target, снова вызывается метка до тех пор, пока индексированный файл не будет найден в target и не будет выполнена копия.
Если вы предпочитаете использовать type
, тогда замените (%source%)
на ('type "%source%"')
.
Примечание: Целочисленное значение индекса основано на 1 и перезапускается с 1 для индексации и увеличивается до тех пор, пока имя файла не окажется в цели.