如何用批处理脚本统计同类型文件总大小并输出到文本?
如何用批处理统计目录下同类型文件的总大小并输出到文本?
嘿,作为批处理新手能想到统计同类型文件大小总和,已经超棒啦!完全可以实现你要的功能,我结合你现有的基础给你拆解解决方案,直接能用的代码+详细解释安排上:
完整实现代码
@echo off setlocal enabledelayedexpansion :: 设定统计目录(默认当前目录,可改成固定路径如 "C:\Your\Target\Folder") set "mypath=%cd%" :: 设定结果输出文件 set "outputfile=FileSizeSummary.txt" :: 初始化统计变量,按扩展名分组累加大小 for %%F in ("%mypath%\*.*") do ( :: 提取文件扩展名,去掉前面的点并转为大写(避免mp3/MP3被分开统计) set "ext=%%~xF" set "ext=!ext:~1!" set "ext=!ext:upper!" :: 处理无扩展名的文件,统一归类为NO_EXTENSION if "!ext!"=="" set "ext=NO_EXTENSION" :: 累加当前文件大小到对应类型的变量(%%~zF是文件的字节大小) set /a "size_!ext! += %%~zF" ) :: 将统计结果写入输出文件 echo 文件类型 总大小(bytes) > "%outputfile%" echo ------------------------ >> "%outputfile%" :: 遍历所有统计变量,输出类型和对应总大小 for /f "tokens=1,2 delims=_=" %%a in ('set size_') do ( echo %%a !size_%%a! >> "%outputfile%" ) echo 统计完成!结果已保存到 %outputfile% endlocal
关键知识点解释
setlocal enabledelayedexpansion:这是循环中动态读写变量的核心,必须开启!它让我们能用!变量名!的形式在循环里实时读取/修改变量值,否则静态的%变量名%会提前解析失效。- 文件属性提取:
%%~xF:提取文件的扩展名(比如.mp3)%%~zF:提取文件的字节大小
- 统一扩展名格式:把扩展名转为大写并去掉前面的点,确保
.mp3、.MP3、mp3都会被归为同一类统计。 - 动态变量累加:用
size_!ext!这种动态变量名,自动给每种扩展名创建对应的累加变量,比如size_MP3就专门存所有MP3文件的总大小。
额外小提示
- 如果需要统计子目录里的文件,把代码里的
for %%F in ("%mypath%\*.*")改成for /r "%mypath%" %%F in (*.*)即可。 - 批处理的整数有上限(最大
2147483647字节,约2GB),如果你的文件总大小超过这个值会溢出报错,这种情况可以考虑用PowerShell辅助,但作为新手先掌握这个基础版本完全够用~
内容的提问来源于stack exchange,提问作者LuigiKraken
相关产品推荐
相关产品推荐

