You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BATCH批处理统计多文件夹下子文件夹数量并导出结果

原代码问题梳理
  • 第一版代码问题:
    • 未开启延迟变量扩展:批处理执行括号包裹的代码块时会预读取所有变量值,普通变量%count%的取值会固定为代码块执行前的结果,无法随计数实时更新
    • 循环语法错误:遍历子目录需要使用for /d /s语法,且后续计数、输出逻辑未用括号包裹,无法和循环绑定
    • 变量操作不符合规范:批处理数值计算需要加/a参数,变量赋值不能留空格,正确写法是set /a count+=1;且每次遍历新的父文件夹前未重置count,会累计之前的统计结果
    • 输出逻辑不符合要求:未将父文件夹名和计数拼接为指定格式,而是分开输出两行
  • 第二版代码问题:
    • 要捕获命令的执行结果,for需要加/f参数,你写的for /d无法正确读取dir命令的输出
    • 统计路径未绑定当前遍历的父文件夹%%a,而是使用了全局路径变量,所以只会输出所有子文件夹的总计数,无法按父文件夹拆分
可直接运行的实现代码
@echo off
setlocal enabledelayedexpansion
:: 先清空旧的输出文件
cd.>output.txt
:: 遍历当前目录下所有一级父文件夹
for /d %%a in (*) do (
    :: 每次统计新父文件夹前先重置计数为0
    set "count=0"
    :: 遍历当前父文件夹下所有子文件夹,每查到一个计数加1
    for /d /s %%b in ("%%a\*") do (
        set /a count+=1
    )
    :: 按指定格式输出到文件
    echo %%a - !count! subfolders>>output.txt
)
endlocal
代码说明
  • 开头setlocal enabledelayedexpansion开启延迟变量扩展,计数变量用!count!取值就能拿到实时更新的结果
  • 每次遍历新的父文件夹都会先把count重置为0,避免和之前的统计结果累计
  • 内层循环自动过滤了文件,只会统计文件夹,加/s参数会统计当前父文件夹下所有层级的子文件夹,如果只需要统计直接一级子文件夹,删掉/s参数即可
  • 路径加了引号处理,支持带空格、特殊字符的文件夹名,输出格式完全匹配要求

内容的提问来源于stack exchange,提问作者dasderwq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:48:03