|
|
本帖最后由 redyear2026 于 2026-4-25 10:28 编辑
限于批处只能玩32位整数计算,也没有再借助外部脚本(如 vbs/jscript/powershell)的大数计算能力,只好用原始字节值了。
非要用批处的拙力鼓捣单位转换(例如转换到 GB 单位),就要有估算的误差,现采用 mb 当量估算,误差大约是 5%,若采用 kb 当量估算,误差会在 2~3%,但遭遇大容量盘区剩余空间,估算值会超限失效。
一旦剩余空间小于1GB,估算值会被被强制为 1GB。
估算为 GB 单位的版本(用20楼代码修订)
- @echo off &if "%~1"=="" "%~f0" 1|sort /r &pause&exit/b
- setlocal enabledelayedexpansion &for /l %%n in (1,1,6) do set "b= !b!"
- for /f "tokens=2 delims=\: " %%d in ('reg query HKLM\SYSTEM\MountedDevices^|findstr /i "\\[c-z]:" ') do (
- set "z="
- for /f "tokens=3 delims= " %%z in ('dir /-c %%d:\^|findstr /eric:"[0-9] 可用字节" ') do set "z=%%z"
- if defined z (
- set "z=!z:~,-6!" &set/a "z/=1024" &if !z! equ 0 set "z=1"
- set "z=!b!!z!" &set "z=!z:~-6!" &echo,!z!GB %%d:) ) 2>nul
- exit/b
复制代码
估算为 GB 单位的版本(用一楼代码修订)
- @echo off &if "%~1"=="" "%~f0" 1|sort /r &pause&exit/b
- setlocal enabledelayedexpansion &set "z=" &for /l %%n in (1,1,6) do set "b= !b!"
- for /f "delims=" %%D in ('fsutil fsinfo drives') do set "allD=%%D"
- for %%d in (%allD:* =%) do (set "z="
- for /f "tokens=2 delims=:(" %%z in ('fsutil volume diskfree %%d') do if not defined z (
- set "z=%%z" &set "z=!z: =!" &set "z=!z:,=!"
- if "!z:~,1!" geq "1" if "!z:~,1!" leq "9" (
- set "z=!z:~,-6!" &set/a "z/=1024" &if !z! equ 0 set "z=1"
- set "z=!b!!z!" &set "z=!z:~-6!" &echo,!z!GB %%d)) )
- exit/b
复制代码 |
|