2012-09-09 137 views
1

我目前面臨的問題是我必須在目錄的每個第一個目錄「圖層」中執行操作。設置遞歸深度

我有一個包含數千個子目錄的文件夾,我只想用/ r爲一個循環進行操作,但問題在於,這些子目錄包含更多子目錄,我不想進入這些目錄。 對於可視化:

Root Dir 
----Sub-Dir 1 
--------Sub-Dir 1 of Sub-Dir 1 
--------Sub-Dir 2 of Sub-Dir 1 
----Sub-Dir 2 
--------Sub-Dir 1 of Sub-Dir 2 
--------Sub-Dir 2 of Sub-Dir 2 
----Sub-Dir 3 
--------Sub-Dir 1 of Sub-Dir 3 
--------Sub-Dir 2 of Sub-Dir 3 

,我只是想進入的第一個「層」子迪爾1,2,3等,並且互不接觸的分次迪爾斯。

回答

3

所有你需要的是嵌套的FOR/D語句(總共2個)。

@echo off 
pushd "rootDir" 
call :doCommands 
for /d %%F in (*) do (
    pushd "%%F" 
    call :doCommands 
    for /d %%F in (*) do (
    pushd "%%F" 
    call :doCommands 
    popd 
) 
    popd 
) 
popd 
exit /b 

:doCommands 
echo processing "%cd%" 
exit /b 

編輯

這裏是一個通用的解決方案,允許您指定的根文件夾爲ARG1(1%)和多少級往下走的ARG2(2%)。

@echo off 
set currentLevel=0 
set maxLevel=%2 
if not defined maxLevel set maxLevel=0 

:procFolder 
pushd %1 
echo processing "%cd%" 
if %currentLevel% lss %maxLevel% (
    for /d %%F in (*) do (
    set /a currentLevel+=1 
    call :procFolder "%%F" 
    set /a currentLevel-=1 
) 
) 
popd 
+0

我該如何進入第一個Sub-Dir層? 我可能不太清楚它,編輯了這個問題的最後一句:) – PTS

+1

@PaulGreen - 只需添加一個FOR/D循環。我已經更新了我的答案。 – dbenham

+0

啊gotcha!非常感謝,完美的作品:) – PTS