#windows #batch-file #cmd #scripting #xcopy
#Windows #пакетный файл #cmd #сценарии #xcopy
Вопрос:
Я пытаюсь скопировать набор файлов в новое местоположение, которое я указал в списке файлов (filelist.txt ) с помощью цикла for и команды xcopy. Однако в моем скрипте возникает проблема, из-за которой создается каталог с идентичным именем файла.
Так, например, у меня есть следующее внутри filelist.txt
MC18071807-06-10M-1807-00246071.tif
BC182518250218B-1825-00000012-0.tif
BC183718370727B-1837-00000013-0.tif
MC18481848-08-04M-1848-00000007.tif
MC18491849-02-24M-1849-00000008.tif
Выполнение командной строки выглядит следующим образом:
for /f "delims=" %i in (filelist.txt) do echo D|xcopy "E:files%i" "F:files%i" /i /z /y
Обратите внимание, что я копирую с дисков E на F. Итак, в E файлы хранятся как таковые:
E:filesMC18071807-06-10M-1807-00246071.tif
E:filesBC182518250218B-1825-00000012-0.tif
E:filesBC183718370727B-1837-00000013-0.tif
E:filesMC18481848-08-04M-1848-00000007.tif
E:filesMC18491849-02-24M-1849-00000008.tif
После запуска команды xcopy я получаю этот набор результатов:
F:filesMC18071807-06-10M-1849-00000008.tifM-1807-00246071.tif
F:filesBC182518250218M-1849-00000008.tifB-1825-00000012-0.tif
F:filesBC183718370727M-1849-00000008.tifB-1837-00000013-0.tif
F:filesMC18481848-08-04M-1849-00000008.tifM-1848-00000007.tif
F:filesMC18491849-02-24M-1849-00000008.tifM-1849-00000008.tif
Обратите внимание, что программа создала папку с именами файлов, а затем поместила файл в эту папку вместо прямой копии из исходного каталога в каталог назначения.
Что в моей команде xcopy может вызвать это?
Комментарии:
1.
xcopy "E:files%i" "F:%~pnxi"
или что-то подобное. Прочитайтеfor /?
объяснение~
модификатора (tilde).
Ответ №1:
Я понял это. При выполнении копирования запрашивается, является ли это каталогом (D) или файлом (F). В моем echo я возвращал D:
for /f "delims=" %i in (filelist.txt) do echo D|xcopy "E:files%i" "F:files%i" /i /z /y
Проблема была решена путем изменения его на echo F.
for /f "delims=" %i in (filelist.txt) do echo F|xcopy "E:files%i" "F:files%i" /i /z /y