尝试使用批处理文件,同时保持结构

尝试使用批处理文件,同时保持结构

我想使用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如果目标子目录不存在,则需要创建。

相关内容