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

如何用命令行获取目录及子目录下所有文件扩展名?附操作疑问

批量获取目录及子目录下所有文件类型的命令行实现

你的操作步骤说明

你的操作步骤没有错误,但可以更简化:

  • 不用特意用pushd命令,直接把bat文件放到目标父目录后双击运行,脚本默认会在自身所在目录执行递归遍历
  • 如果非要用命令行操作,直接用cd命令切换到父目录,再输入bat文件名运行即可,pushd主要用于临时切换网络共享路径这类场景,本地目录没必要用到

修改后的批处理脚本(支持递归遍历子目录)

原脚本只能遍历当前目录,要支持子目录递归,需要用到for /r参数,同时还要开启延迟变量扩展解决循环内变量更新的问题,下面是优化后的完整脚本:

@echo off & setlocal enabledelayedexpansion

:: 初始化无扩展名文件的计数器
set "ext[none]=0"

:: 递归遍历当前目录及所有子目录下的所有文件
for /r %%I in (*) do (
    set "current_ext=%%~xI"
    :: 处理无扩展名的文件
    if "!current_ext!"=="" (
        set /a "ext[none] += 1"
    ) else (
        :: 去掉扩展名前的点,统一转为小写(避免.TXT和.txt被当成不同类型)
        set "current_ext=!current_ext:~1!"
        set "current_ext=!current_ext:lcase!"
        set /a "ext[!current_ext!] += 1"
    )
)

:: 格式化输出结果
echo 所有文件类型及统计数量:
echo ------------------------
for /f "tokens=2,3 delims=[]=" %%a in ('set ext[') do (
    if "%%a"=="none" (
        echo 无扩展名文件:%%b 个
    ) else (
        echo .%%a:%%b 个
    )
)

endlocal

脚本关键说明

  • for /r:实现递归遍历当前目录及所有子文件夹下的文件
  • enabledelayedexpansion:开启延迟扩展,让循环内部的变量修改能实时生效(批处理默认不开启,循环内变量会保持初始值)
  • 无扩展名文件单独计数:避免这类文件被遗漏
  • 扩展名转小写:统一统计规则,避免大小写差异导致的重复统计(不需要的话可以删掉set "current_ext=!current_ext:lcase!"这一行)
  • 格式化输出:把原始的set ext[输出转换成更易读的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:10:08