通过 dir 命令获取剩余空间的字节数字之后,转换成以MB为单位的数值,往往容易受到CMD不能处理超过 2^31-1 的数值的限制,从而难以直接把字节数转换为MB,以下代码模拟手工计算整数相除的过程,顺利地解决了这一难题:
@echo off
setlocal enabledelayedexpansion
:Main
cls
set /a num2=1024*1024
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
set driver=%%i
set num1=0
set num3_str=
set num4=
for /f "tokens=3" %%j in ('dir /a /-c %%i:\ 2^>nul') do set num1=%%j
if not "!num1!"=="0" (
call :loop
for /f "delims=0 tokens=*" %%k in ("!num3_str!") do set num3_str=%%k
if not defined num3_str (
echo.&echo %%i 盘尚未被使用,具体空间无法查询&echo.
) else (
echo.&echo %%i 盘剩余空间为 !num3_str! MB&echo.
)
)
)
pause
goto Main
:loop
:: 求商
set /a num3=%num4%%num1:~0,1%/%num2%
:: 求商序列
set num3_str=%num3_str%%num3%
:: 求余
set /a num4=%num4%%num1:~0,1%%%%num2%
if %num4% equ 0 set num4=
set num1=%num1:~1%
if not "%num1%"=="" goto loop
goto :eof
更多信息,可以参考这个帖子:
如何显示磁盘的剩余空间?
发现 call echo 中的 call 属于多余的命令,精简一下;判断某个分区是否存在,在 for 语句中可以不用 if exist 语句,直接用 dir %%i 2>nul 的格式就可以了,再精简一下。
经 boy0750 提醒,发现某分区被使用0字节的时候, dir /-c %%i:\ 会提取不到可用字节数,改成 dir /a /-c %%i:\ 之后,此问题得到部分解决(当分区不存在任何文件的时候,提取不到剩余空间的字节数,目前只能做提示)。感谢 boy0750 的提醒。
Last edited by namejm on 2007-8-12 at 03:18 AM ]