|
本帖最后由 青青草 于 2021-7-25 10:48 编辑
现在的硬盘都是大容量,需考虑批处理计算时受到位数的限制,故再次更新如下:
- @echo off
- setlocal EnableDelayedExpansion
- set zero=0000000000000000000000000000000000000000
- set size=!zero!1
- for /f "tokens=1-3" %%a in ('wmic logicaldisk where "DriveType='3'" get freespace^,name^,size^|find ":"')do (
- for /f "tokens=1,2,3 delims= " %%i in ("%%c") do (
- set space=%%a
- set free=!zero!!space!
- if "!free:~-40!" gtr "!size:~-40!" (
- set size=!free:~-40!
- set maxdisk=%%b
- set mb=!space!
- )
- echo 分区%%b 大小:%%c 字节 剩余 !space! 字节
- )
- )
- echo 硬盘剩余最大: 分区 !maxdisk! 剩余: %mb% 字节
- pause
复制代码 利用字符串比较,较好地解决了批处理计算时受位数限制问题,代码较为简洁。位数预设了40位,应该足够了。
虽然位数预设了40位,足够用了,但总感觉缺点什么;对了,预设40位,还是受到限制,代码不够通用。故修改如下:- @echo off
- setlocal EnableDelayedExpansion
- set maxn=0
- set size=0
- for /f "tokens=1-3" %%a in ('wmic logicaldisk where "DriveType='3'" get freespace^,name^,size^|find ":"')do (
- set space=%%a
- call :Length space n
- if !n! gtr !maxn! (
- set maxn=!n!
- set size=!space!
- set maxdisk=%%b
- )
- if "!n!" EQU "!maxn!" (
- if "!space!" gtr "!size!" (
- set size=!space!
- set maxdisk=%%b
- )
- )
- echo 分区%%b 大小:%%c 字节 剩余 !space! 字节
- )
- echo 硬盘剩余最大: 分区 !maxdisk! 剩余: %size% 字节
- pause
- :Length
- setlocal enabledelayedexpansion
- set "$=!%1!#"
- set "len="&for %%a in (4096 2048 1024 256 128 64 32 16 8 4 2 1) do (if "!$:~%%a,1!" NEQ "" set/a len+=%%a&set "$=!$:~%%a!" &if "!$:~1!"=="" goto ok)
- set "s=!s!fedcba9876543210" &set/a "len+=0x!s:~16,1!"
- :ok
- endlocal&set/a "%2=%len%"
- goto:eof
复制代码
|
|