如何對多個資料夾中的文件執行命令?

如何對多個資料夾中的文件執行命令?

我正在嘗試找出一種方法來對多個資料夾中存在的多個文件執行命令。據我了解,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

  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="(指定沒有分隔符號)來使其正常工作。
  2. 如果您鍵入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 1file 2目錄Folder A,並在 下建立file 3和目錄。 而且,正如 @dave_thompson_085 指出的那樣,您可以合併到.file 4Folder B%~pa%~na%~pna

相關內容