Вот один из способов сделать это:
@Echo Off
SetLocal DisableDelayedExpansion
Set "fileOld=chart_list.txt"
Set "fileNew=newchart_list.txt"
Set "dirSrce=C:\Source"
Set "dirDest=C:\Destination"
(For /F "UseBackQ Tokens=*" %%A In ("%fileOld%") Do (Set /P "B="<&3
SetLocal EnableDelayedExpansion
Echo(Copy /Y "%dirSrce%\%%A" "%dirDest%\!B!"
EndLocal)) 3<"%fileNew%"
Pause
Просто заполните переменные в строках 3
- 6
вашими конкретными данными, (не добавляйте конечные обратные слеши в пути к каталогами не включайте двойные кавычки или удаляйте те, которые существуют в настоящее время) .
Если вы удовлетворены результатом, вы можете удалить Echo(
из строки 10
и удалить последнюю строку, чтобы фактически выполнитьCopy
процедура.
Скрипт не проверяет, являются ли эти переменные действительными, существуют ли они, совпадают ли они по числу строк и т. д. Я оставлю это вам для работы по мере необходимости .
Редактировать
Вот альтернативный метод, более похожий на оригинал, (но с использованием команды Find
) :
@Echo Off
Setlocal EnableExtensions EnableDelayedExpansion
Set "src_folder=C:\Source"
Set "dst_folder=C:\Destination"
Set "flag=0"
For /F "UseBackQ Tokens=*" %%A In ("chart_list.txt") Do (
Set /A flag+=1
For /F "Tokens=1* Delims=]" %%B In ('
"Find /N /V ""<"newchart_list.txt"|Find "[!flag!]""'
) Do Copy /Y "%src_folder%\%%A" "%dst_folder%\%%C")
… и без флага или необходимости отложенного расширения, (тот же метод, что и у Aacini, но с использованием Find
вместо FindStr
) :
@Echo Off
Set "src_folder=C:\Source"
Set "dst_folder=C:\Destination"
For /F "Tokens=1* Delims=[]" %%A In ('Find /N /V ""^<"chart_list.txt"') Do (
For /F "Tokens=1* Delims=[]" %%C In ('Find /N /V ""^<"newchart_list.txt"'
) Do If "%%C"=="%%A" Copy /Y "%src_folder%\%%B" "%dst_folder%\%%D")