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