标题: 求所有分区剩余空间的精确值(以MB为单位)
[打印本页]
作者: namejm
时间: 2007-3-11 13:14
标题: 求所有分区剩余空间的精确值(以MB为单位)
通过 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 ]
作者: lxmxn
时间: 2007-3-11 13:29
版主牛X啊,佩服……
作者: zh159
时间: 2007-3-11 14:55
来个BAT+VBS的
使用延迟变量:
@echo off
setlocal enabledelayedexpansion
>tmp.vbs echo result = wscript.arguments(1)/1024/1024
>>tmp.vbs echo Wscript.Echo wscript.arguments(0),"盘剩余空间为",result,"MB"
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 (
if exist %%i:\ (
for /f "tokens=3" %%j in ('dir /-c %%i:\') do set num=%%j
if not "%%j"=="0" cscript //nologo tmp.vbs %%i: !num!
))
del tmp.vbs
pause
exit
不使用延迟变量:
@echo off
>tmp.vbs echo result = wscript.arguments(1)/1024/1024
>>tmp.vbs echo Wscript.Echo wscript.arguments(0),"盘剩余空间为",result,"MB"
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 (
if exist %%i:\ (
for /f "tokens=3" %%j in ('dir /-c %%i:\') do set num=%%j
if not "%%j"=="0" call :loop %%i:
))
del tmp.vbs
pause
exit
:loop
cscript //nologo tmp.vbs %1 %num%
goto :eof
作者: vkill
时间: 2007-3-12 08:25
win2003里到有几个好命令的
freedisk
diskpart
作者: nicesoft
时间: 2007-5-1 18:22
请教,我只想把D盘的剩余空间存入一个变量中,该怎样写?谢谢