加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

窗口 – 在dos中设置dir命令的递归深度

发布时间:2020-12-14 04:32:53 所属栏目:Windows 来源:网络整理
导读:我正在使用以下命令列出一些目录: dir /b /s /AD c:tempdir_list.txt 这给了我几乎所需的清单.但是这是太多的数据,因为一些文件夹有很多子文件夹,我不想在我的列表中看到. 是否可以将命令的递归深度限制为-lets说-3? c:dir_1dir_2dir_3dir_foo 所以
我正在使用以下命令列出一些目录:
dir /b /s /AD > c:tempdir_list.txt

这给了我几乎所需的清单.但是这是太多的数据,因为一些文件夹有很多子文件夹,我不想在我的列表中看到.

是否可以将命令的递归深度限制为-lets说-3?

c:dir_1dir_2dir_3dir_foo

所以如果我在上面的例子中执行命令c:>我不想看到dir_foo目录,只是dir_n的目录

也许没有批处理/ vb脚本?

我确定可以编写一个复杂的命令来列出n级目录.但是很难记住语法和错误.每次你想要更改级别的数量也需要改变.

更好地使用一个简单的脚本.

编辑5年后 – 实际上,自Vista以来就有一个简单的一个班轮. See my new ROBOCOPY solution.

这是一个执行深度优先列表的批处理解决方案. DIR / S命令执行广泛的第一个列表,但我更喜欢这种深度第一格式.

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

:procFolder
pushd %1 2>nul || exit /b
if %currentLevel% lss %maxLevel% (
  for /d %%F in (*) do (
    echo %%~fF
    set /a currentLevel+=1
    call :procFolder "%%F"
    set /a currentLevel-=1
  )
)
popd

广泛的第一个版本几乎是一样的,除了它需要一个额外的FOR循环.

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

:procFolder
pushd %1 2>nul || exit /b
if %currentLevel% lss %maxLevel% (
  for /d %%F in (*) do echo %%~fF
  for /d %%F in (*) do (
    set /a currentLevel+=1
    call :procFolder "%%F"
    set /a currentLevel-=1
  )
)
popd

两个脚本都有两个参数:

arg1 =要列出的根目录的路径

arg2 =要列出的级别数.

所以要列出当前目录的3个级别,可以使用

listDirs.bat . 3

要列出不同目录的5个级别,可以使用

listDirs.bat "d:my folder" 5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读