1

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

我有一个包含数千个子目录的文件夹,我只想用 /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 等,不要触摸每个子目录。

4

1 回答 1

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
于 2012-09-09T21:12:00.917 回答