2014-01-27 135 views
1

我有一個包含喜歡的東西的文本文件:批For循環 - 從文件夾名稱刪除文件

「C:\文件夾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開始的文件名是目標的一部分,而不是要複製的文件。有任何想法嗎?

+0

泰爾請:\審計\ test.txt的線由雙引號sorounded? –

+0

是的,他們被引用。 – PnP

回答

2

反斜槓在這種情況下被視爲轉義字符,因爲它緊接在關閉"之前。如果將.追加到路徑中,結果將是相同的路徑,但反斜槓將不再位於結尾"之前,因此不會將其視爲結尾引號的轉義字符。

在您發佈的示例中,源路徑和目標路徑均以\結尾。因此,你需要添加一個.既:如果C

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

/MIR將遞歸複製目錄結構,即使在test.txt中不包含conatin文件名的目錄也是如此。 請不要對第一個參數使用雙引號。 /R:1000000/W:30/COPY:DAT是默認值,所以不需要明確設定。

請嘗試如下因素代碼:

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

如果您使用的空間和/或特殊符號的文件路徑,你可以試試下面taht代碼使用拷貝COMAND:

@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" 
) 
+0

這確實可以解決問題,但前提是路徑不包含特殊字符或空格。 –

+0

文件路徑被引用(如文章評論中提到的那樣),所以不用擔心空格。空間角色 - 也許是。如果用戶不使用具有特殊字符的文件,也許不值得擔心它們。 –

+0

代字號'〜'會導致刪除引號,因此如果路徑中的任何位置有空格,不帶引號的'%%〜dpa'將被視爲兩個(或更多)參數。 –