Windows 设置递归深度

Windows 设置递归深度,windows,batch-file,Windows,Batch File,我目前面临的问题是,我必须在目录的每个第一个dir“层”中执行一个操作 我有一个包含数千个子目录的文件夹,我只想使用/r进行for循环,但问题是,这些子目录包含更多子目录,我不想进入这些子目录。 对于可视化: 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

我目前面临的问题是,我必须在目录的每个第一个dir“层”中执行一个操作

我有一个包含数千个子目录的文件夹,我只想使用/r进行for循环,但问题是,这些子目录包含更多子目录,我不想进入这些子目录。 对于可视化:

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等,不涉及每个子目录。

您所需要的是嵌套的FOR/D语句(总共2个)

编辑

这是一个通用解决方案,允许您将根文件夹指定为arg1(%1),并将下一级的级别指定为arg2(%2)


如何进入第一个子目录层?我可能不太清楚,编辑了问题的最后一句:)@PaulGreen-只需再添加一个FOR/D循环。我已经更新了我的答案。@PaulGreen-我添加了另一个选项,允许您设置最大深度。非常简洁。谢谢,这是一个非常有用的脚本!
@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
@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