Проблемы с циклом for и xcopy, создающими папки, которые имитируют имена файлов?

#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