我想使用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
循环中的命令for
导致了问题:%%a
包含子目录路径和 PDF 文件名,因此md "%my_folder%\%%a" 2>nul
将在目标文件夹中创建一个包含 PDF 名称作为最后一个子目录的目录路径。
当目标路径是目录时,copy
命令会将源文件复制到其中,并观察到结果。
虽然可以解析%%a
以提取目录路径和文件名,但有一个技巧可用于引用目录路径而无需解析:如果%%a
包含带有目录路径的文件名,%%a\..
则将引用目录路径。即使%%a
是一个文件路径,的解析%%a\..
也会识别包含的目录,而无需检查的最后一个元素%%a
是文件还是目录。
因此循环中的命令for
变成:-
md "%my_folder%\%%a\.." 2>nul
copy /v /y "%main_folder%\%%a" "%my_folder%\%%a\.."
md
如果目标子目录不存在,则需要创建。