2012-09-09 132 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