如何编写可在Win2k运行的统计指定文件夹GB级大小的Batch脚本
兼容Win2k的文件夹GB大小统计批处理方案
原有脚本问题说明
- 第一版脚本失效原因:Batch原生的
set /a仅支持32位有符号整数运算,最大值为2147483647字节(约2GB),超过该值就会溢出报错或返回错误结果;如果遍历的目标路径配置错误、无权限访问也会返回0。 - 第二版脚本的目录指定逻辑:代码中的
%1是命令行参数占位符,可通过两种方式指定目标目录:- 直接修改代码,将
%1替换为目标文件夹的绝对路径,路径带空格时必须包裹英文双引号,示例:dir "D:\工作文档" /s /-c - 不修改代码,直接把要统计的文件夹拖到批处理文件图标上释放,即可自动传入路径运行
- 直接修改代码,将
完整可用脚本
针对Win2k无PowerShell、32位整数溢出的限制,以下脚本通过读取dir命令的输出字符串做运算,支持超过2GB的文件夹大小统计,输出单位为GB:
@echo off setlocal enabledelayedexpansion :: 可直接修改下方路径为固定统计目录,保留%~1则支持拖放文件夹运行 set "target_dir=%~1" if not exist "%target_dir%" ( echo 错误:指定的目录不存在 pause exit /b 1 ) :: 读取dir命令输出提取总字节数,英文系统请把下方的"字节"替换为"bytes","可用"替换为"free" set "summary_line=" for /F "tokens=*" %%a in ('dir /s /-c "%target_dir%" ^| find "字节" ^| find /v "可用"') do set "summary_line=%%a" for /f "tokens=2 delims=)" %%a in ("%summary_line%") do set "size_str=%%a" :: 清理多余字符 set "size_str=%size_str:字节=%" set "size_str=%size_str: =%" :: 大数转GB(1GB=1073741824字节,保留1位小数) set "len=0" :calc_len if not "!size_str:~%len%!"=="" set /a len+=1 & goto calc_len set /a cut_pos=len-9 if %cut_pos% lss 1 ( set "gb_size=0.!size_str:~0,1!" ) else ( set "int_part=!size_str:~0,%cut_pos%!" set "dec_part=!size_str:~%cut_pos%,1!" set "gb_size=!int_part!.!dec_part!" ) echo 统计目录:%target_dir% echo 总字节数:%size_str% B echo 总大小:%gb_size% GB pause endlocal
适配说明
如果你的Win2k是英文系统,需要将脚本中find "字节"改为find "bytes",find /v "可用"改为find /v "free"即可正常运行。
内容的提问来源于stack exchange,提问作者Duke19
相关产品推荐
相关产品推荐

