Я хотел использовать robocopy , но это невозможно, поскольку к моему текстовому файлу прикреплены имена файлов. В итоге мне пришлось использовать copy вместо этого.

Я хотел скопировать файлы, как это ...

Source: S:\folder\A\B\C\D\E\product_pdf\Drive\DriveDeluxeAluminumBathChair_RTL12202KDR.pdf
Destination: C:\wamp64\F\G\product_pdf\Drive\DriveDeluxeAluminumBathChair_RTL12202KDR.pdf

Вот как указан мой текстовый файл (ActivePDF.txt)

product_pdf\Drive\DriveDeluxeAluminumBathChair_RTL12202KDR.pdf
product_pdf\Drive\DriveCommodesNRS185007-11117N.pdf
product_pdf\Drive\DriveCommodes11125Series.pdf
product_pdf\Drive\DriveSuctionCupGrabBar_RTL13082.pdf
product_pdf\Drive\DriveChromeKnurledGrabBar.pdf

Моя попытка пакетного файла выглядит следующим образом

@echo on
enableextensions 
set main_folder=S:\folder\A\B\C\D\E
set my_folder=C:\wamp64\F\G
set log_file="%main_folder%\CopyLog.txt"
for /f "delims=" %%a in (ActivePDF.txt) do if exist "%main_folder%\%%a" (
    md "%my_folder%\%%a" 2>nul
    copy /v /y "%main_folder%\%%a" "%my_folder%\%%a"
)

Он скопировал, но в итоге создал папку с «.pdf», а фактические файлы PDF находятся внутри этих «.pdf» папок. (Поэтому каждый PDF-файл содержится в собственной папке ...)

Я думаю, что добираюсь туда ... но я действительно задаюсь вопросом, есть ли более чистый способ сделать это.

1 ответ1

0

Проблема заключается в командах цикла for : %%a содержит путь к подкаталогу и имя файла PDF, поэтому md "%my_folder%\%%a" 2>nul создаст в целевой папке путь к каталогу который включает в себя имя PDF в качестве последнего подкаталога.

Если целевой путь является каталогом, команда copy копирует в него исходный файл (-ы) с полученным результатом.

Хотя можно проанализировать %%a для извлечения пути к каталогу и имен файлов, существует хитрость, которая может использоваться для ссылки на путь к каталогу без разбора: если %%a содержит имя файла с путем к каталогу, то %%a\.. будет ссылаться на путь к каталогу. Даже если %%a является путем к файлу, синтаксический анализ %%a\.. будет определять содержащий каталог, не проверяя, является ли последний элемент %%a a файлом или каталогом.

Таким образом, команды в цикле for становятся:

md "%my_folder%\%%a\.." 2>nul
copy /v /y "%main_folder%\%%a" "%my_folder%\%%a\.."

md необходим для создания целевого подкаталога, если он не существует.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .