我是批次文件程式設計的新手,我正在分析現有的批次文件,該文件是由我們公司的前開發人員實現的。所以我想弄清楚他到底想做什麼。我有以下命令:
for /r %x in (\\Server6\doc_production\*38316468*) do ren "%x" /y \\Server6\doc_production\error\
我知道這是一個循環命令,應該遞歸地遍歷給定的路徑。但有些部分我不知道:
參數 /y 的作用是什麼?我透過谷歌搜尋找不到任何東西。
這個命令到底是做什麼的?
更新: 謝謝回覆。許多人說這個指令會將與模式相符的檔案移到錯誤子資料夾。所以我嘗試在本地機器上測試它。我建立了以下目錄:
C:
├──test
│ └──error
我在測試資料夾中插入了一個檔案 38316468.sql。
然後我執行了命令:
for /r %x in (C:\doc_production\*38316468*) do ren "%x" /y C:\doc_production\error\
但什麼事也沒發生。該命令執行後沒有任何錯誤訊息。沒有語法錯誤。但它什麼也沒做。它不會移動文件,也不會重新命名文件。為什麼會這樣呢?
答案1
這對我來說似乎無效。
RENAME (REN) 沒有 /y 參數,並且要求第二個參數是檔案名稱(而不是像這裡這樣的資料夾)。
MOVE 確實有“/y”,意思是“當目標已經存在時,不要用“你確定”的問題來打擾我,並假設我回答“是””,並且可以使用資料夾作為第二個參數。
但如果是 MOVE,/Y 應直接出現在 MOVE 指令之後、參數之前。如果將 REN 替換為 MOVE,它仍然是語法錯誤。
無論如何:FOR 命令會建立與模式相符的所有檔案的清單(將查看子目錄)38316468然後依序為每場比賽調用 REN。 REN(應該是 MOVE)嘗試將每個檔案重新命名(移動)到錯誤資料夾。
但對於 MOVE 來說,使用 /Y 仍然是錯誤的。
這個錯誤的另一個問題是 FOR 正在運行的來源資料夾的子資料夾。這將導致命令嘗試將文件移動到自身。 (例如,從錯誤資料夾到錯誤資料夾。)這可能是也可能不是問題,這取決於稍後再次使用 FOR 命令之前錯誤資料夾是否已清除。
最後但並非最不重要的一點:一些警告:
在批次檔中使用 %X 變數需要將 % 加倍為 %%X。在命令列上您可以使用單一%。而 %X 變數區分大小寫,因此 %X 和 %x 不是同一件事。
答案2
讓我們剖析一下它,以便您了解它在做什麼。
for /r %x
此指令從 path 開始沿著資料夾樹往下走\\Server6\doc_production\*38316468*
,並對每個符合的檔案執行 DO 語句。
在您的命令中,DO
或 操作ren
用於重新命名。
這/y
會阻止命令提示字元提示您覆寫目標中已存在的來源檔案。
看起來好像它正在第一個目錄中查找通配符編號,並將其重命名並將其電影到 /error/ 資料夾,但沒有檔案名稱實際使其工作。需要指定 /error/ 資料夾後的檔案名,此命令才能正常運作。