我正在嘗試找出一種方法來對多個資料夾中存在的多個文件執行命令。據我了解,for
循環是在 CMD 中執行此操作的最佳方法(我使用的是 Windows)。
對於這個特定的命令,我試圖在多個資料夾中為多個文件建立資料夾。這是一個視覺效果:
Folder A
File 1.avi
File 2.avi
Folder B
File 3.avi
File 4.avi
我做了一些搜索,然後我想出了這個命令:
for /f "delims=*" %a in ('dir *.avi /b /s') do md "%~na"
我從其中拼湊起來這裡。這幾乎是正確的——它為多個資料夾中包含的每個檔案建立一個資料夾。問題是,我需要將這些新資料夾包含在與文件相同的資料夾中。此特定命令會將新資料夾放置在原始資料夾的位置,而不是放在其中。
有人有什麼想法嗎?任何幫助,將不勝感激。謝謝。
答案1
標準偵錯技術是將
echo
命令插入腳本甚至複合/複雜命令中。如果你這樣做for /f "delims=*" %a in ('dir *.avi /b /s') do @echo md "%~na"
你會得到輸出
"file 1" "file 2" "file 3" "file 4"
筆記:
- 這
@
阻止echo
命令他們自己從顯示,所以你只能看到他們的輸出。 "delims=…"
告訴我們for
如何解析命令的輸出行dir *.avi /b /s
。我不知道為什麼你連結到的答案建議"delims=*"
。但預設行為是在空格處分隔行,因此,如果您的目錄和/或檔案名稱包含空格(如您所示),您應該使用"delims="
(指定沒有分隔符號)來使其正常工作。
- 這
如果您鍵入
for /?
或help for
,您將獲得有關該for
命令的文件。在第五頁下面,你會看到In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax: %~I - expands %I removing any surrounding quotes (") ︙ %~pI - expands %I to a path only %~nI - expands %I to a file name only ︙ The modifiers can be combined to get compound results … ︙
這解釋了為什麼
%~na
只為您提供*.avi
全名位於%a
.現在嘗試for /f "delims=" %a in ('dir *.avi /b /s') do @echo md "%~pa"
你會得到
」目前目錄\資料夾A\" 」目前目錄\資料夾A\" 」目前目錄\資料夾B\" 」目前目錄\資料夾B\"
由此我們可以得出結論,你想做的
for /f "delims=" %a in ('dir *.avi /b /s') do md "%~pa%~na"
在 下建立
file 1
和file 2
目錄Folder A
,並在 下建立file 3
和目錄。 而且,正如 @dave_thompson_085 指出的那樣,您可以合併到.file 4
Folder B
%~pa%~na
%~pna