2014-10-08 48 views
1

我找不到具體提到我的問題,雖然它似乎是一個常見問題。如何遞歸循環訪問特定文件類型的目錄?

我試圖循環遍歷目錄中的所有批處理文件,無論多深。

以下是我有:

for /f "tokens=* delims=" %%a in ('dir %DIR% /s /b *.bat') do (
    if not exist %%a\* echo %%a 
) 

凡DIR預先設定。我只迴應文件。

顯然這是錯誤的,因爲它首先輸出所有文件,然後是所有批處理文件。

似乎我需要以某種方式合併* .bat說明符和%DIR%變量,但我不知道如何做到這一點。

回答

1
for /r %DIR% %%a in (*.bat) do (... 
+0

這對我有用。我很好奇看到提供的兩個答案背後的推理 - 這個看起來簡單得多。對該主題的任何貢獻? – Rail24 2014-10-08 18:57:28

+0

@ Rail24 - 如果DO不修改樹列表,則此方法是首選,因爲它更快,並且可以在文件名中使用unicode。但是,假設DO添加了新文件,那麼這些新創建的文件也可能會迭代,這取決於它們如何排序以及內部緩衝區的大小。如果DO修改或添加文件,則需要使用DIR/S/B/A-D的FOR/F,因爲它會在開始迭代之前緩存整個列表的結果。但是FOR/F與unicode不兼容。 – dbenham 2014-10-08 22:04:35

1

您的問題是有些模糊給我,但我認爲這是你想要什麼:

@echo off 
setlocal 

set DIR=h:\scripts 

for /f "usebackq delims=;" %%q in (`dir %DIR%\*.bat /s/b/a-d`) do (
    echo %%q 
) 

endlocal 

這使得所有.bat文件到%%q

+0

這裏的問題是其中包含空格的文件。以前,似乎'delims ='解決了這個問題。任何想法? – Rail24 2014-10-08 18:53:37

+0

我加入了delims =;以便文件名中包含空格 – jftuga 2014-10-08 21:35:36