Batch For Loop - 从文件夹名称中删除文件

时间:2014-01-27 18:11:06

标签: batch-file robocopy modifier

我有一个包含以下内容的文本文件:

“C:\ Folder A \ Test.txt”

我需要将某些文件及其各自的容器复制到目录中的新目录,但只能复制我指定的文件及其父文件夹结构。

在我的批次中:

for /f "delims=" %%a in (C:\audit\test.txt) do (
  robocopy "%%~dpa" "Z:\" "%%~nxa" /E /COPY:DAT /PURGE /MIR /R:1000000 /W:30
)
pause

然而,它没有使用robocopy,可能与尾部反斜杠有关。 Source被混淆并显示文件夹和Z:。这意味着来自%%~nxa的文件名是目标的一部分而不是要复制的文件。有任何想法吗?

2 个答案:

答案 0 :(得分:2)

在这种情况下,反斜杠被视为转义字符,因为它紧跟在结束"之前。如果将.附加到路径,结果将是相同的路径,但反斜杠将不再在结束"之前,因此不会被视为结束引号的转义字符。< / p>

在示例中,您发布的源路径和目标路径都以\结尾。因此,您需要向两者添加.

for /f "delims=" %%a in (C:\audit\test.txt) do (
  robocopy "%%~dpa." "Z:\." "%%~nxa" /E /COPY:DAT /PURGE /MIR /R:1000000 /W:30
)
pause

答案 1 :(得分:0)

/ MIR将递归复制目录结构,甚至是在test.txt中不包含文件名的目录。 请不要在第一个参数中使用双引号。 / R:1000000 / W:30 / COPY:DAT是默认值,因此无需明确设置tehm。

请尝试下面的代码:

for /f "tokens=* delims=" %%a in (C:\audit\test.txt) do (
  robocopy %%~dpa "Z:\" "%%~nxa" /E /PURGE /MIR 
)
pause

如果您在文件路径中使用空格和/或特殊符号,则可以尝试以下代码,使用复制命令:

@echo off
for /f "tokens=* delims=" %%a in (C:\audit\test.txt) do (
    if not exist "Z:\%%~pa" mkdir "Z:\%%~pa"
    copy /Y "%%~a" "Z:\%%~pnxa"
)