@echo off
title=Disk_Calculator_Made By Liangyx
color 9e
chcp 437
::设置命令提示符显示为英文环境
mode con cols=40 lines=33
cd /d C:/
if exist disk_volum_e.txt del disk_volum_e.txt
echo >>disk_volum_e.txt
title=Disk_Calculator_Made By Liangyx
color 9e
chcp 437
::设置命令提示符显示为英文环境
mode con cols=40 lines=33
cd /d C:/
if exist disk_volum_e.txt del disk_volum_e.txt
echo >>disk_volum_e.txt
::统计可用驱动器盘符,磁盘剩余容量
set /a counter=0,numb=0
:loop1
set /a counter+=1
for /f "tokens=%counter% delims= " %%j 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 tmpt=%%j&goto ts
:ts
dir %tmpt%/ |find "free" >>disk_volum_e.txt && set /a numb+=1||cls
dir %tmpt%/ |find "drive" >>disk_volum_e.txt||cls
if %counter% lss 25 goto loop1
echo There are %numb% drivers ready for reading
set /a counter=0,numb=0
:loop1
set /a counter+=1
for /f "tokens=%counter% delims= " %%j 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 tmpt=%%j&goto ts
:ts
dir %tmpt%/ |find "free" >>disk_volum_e.txt && set /a numb+=1||cls
dir %tmpt%/ |find "drive" >>disk_volum_e.txt||cls
if %counter% lss 25 goto loop1
echo There are %numb% drivers ready for reading
::读取各可用驱动器磁盘剩余容量
set /a skips=1,b=0,e=0,f=0
:: a M------c.d G(b M-----e.f G for accumulation)
:loop
set /a count=0,a=0,c=0,d=0,numbe=2*skips-1,flag=0
for /f "skip=%numbe% tokens=3 delims= " %%i in (disk_volum_e.txt) do for /f "tokens=1-4 delims=," %%j in ("%%i") do set num=%%j%%k%%l%%m & goto mid
:mid
echo.
if %num% lss 1048576 (if %num% gtr 0 (set Char=M&goto last) else (set lv=1&goto last))
set recv=%num:~0,-7%
set rest=%num:~-7%
::计算如何去0
:front
if %rest:~0,1%==0 (if %flag% lss 5 set /a flag+=1&&set rest=%rest:~1%&&goto front)
:tt
if %recv% LSS 1073 (goto small) else (if %recv% EQU 1073 (goto equal) else goto greater)
:small
if %count%==0 (goto s1) else goto s2
:s1
if not defined Char set Char=M
set /a a+=%num%/1048576
goto last
:s2
::计算如何补0
set trest=%rest%
set ti=100000
:calc1
set /a trest/=10
if %trest% gtr 0 set /a ti/=10 &goto calc1
set /a skips=1,b=0,e=0,f=0
:: a M------c.d G(b M-----e.f G for accumulation)
:loop
set /a count=0,a=0,c=0,d=0,numbe=2*skips-1,flag=0
for /f "skip=%numbe% tokens=3 delims= " %%i in (disk_volum_e.txt) do for /f "tokens=1-4 delims=," %%j in ("%%i") do set num=%%j%%k%%l%%m & goto mid
:mid
echo.
if %num% lss 1048576 (if %num% gtr 0 (set Char=M&goto last) else (set lv=1&goto last))
set recv=%num:~0,-7%
set rest=%num:~-7%
::计算如何去0
:front
if %rest:~0,1%==0 (if %flag% lss 5 set /a flag+=1&&set rest=%rest:~1%&&goto front)
:tt
if %recv% LSS 1073 (goto small) else (if %recv% EQU 1073 (goto equal) else goto greater)
:small
if %count%==0 (goto s1) else goto s2
:s1
if not defined Char set Char=M
set /a a+=%num%/1048576
goto last
:s2
::计算如何补0
set trest=%rest%
set ti=100000
:calc1
set /a trest/=10
if %trest% gtr 0 set /a ti/=10 &goto calc1
if not %recv%==0 set /a d+=%recv%%ti:~1%%rest%/1024*1000/1048576
goto last
:equal
if %count%==0 (if %rest% GEQ 741824 (set /a c+=1&set Char=G&set count=1) else (set /a a+=1023&set Char=M)) else (if %rest% geq 741824 (set /a c+=1) else set /a d+=999)
goto last
:greater
set /a count+=1
set /a recv=%recv%-1073,c+=1,trest=%rest%
::计算如何补0
if %rest% GTR 741824 set /a rest-=741824
set ti=100000
:calc
set /a rest/=10
if %rest% gtr 0 set /a ti/=10 &goto calc
set rest=%trest%
if not defined Char set Char=G
if %rest% GEQ 741824 (set /a rest-=741824) else (set /a rest=%ti%%rest%-741824,recv-=1)
goto tt
:last
goto last
:equal
if %count%==0 (if %rest% GEQ 741824 (set /a c+=1&set Char=G&set count=1) else (set /a a+=1023&set Char=M)) else (if %rest% geq 741824 (set /a c+=1) else set /a d+=999)
goto last
:greater
set /a count+=1
set /a recv=%recv%-1073,c+=1,trest=%rest%
::计算如何补0
if %rest% GTR 741824 set /a rest-=741824
set ti=100000
:calc
set /a rest/=10
if %rest% gtr 0 set /a ti/=10 &goto calc
set rest=%trest%
if not defined Char set Char=G
if %rest% GEQ 741824 (set /a rest-=741824) else (set /a rest=%ti%%rest%-741824,recv-=1)
goto tt
:last
::赋予fig适当值
set tst=%skips%
set /a number=2*%tst%
for /f "skip=%number% tokens=4 delims= " %%t in (disk_volum_e.txt) do if defined tst set fig=%%t:%Char%&set tst=&&if defined lv (set fig=%%t:Maybe a DVD/CDROM&set lv=)
set tst=%skips%
set /a number=2*%tst%
for /f "skip=%number% tokens=4 delims= " %%t in (disk_volum_e.txt) do if defined tst set fig=%%t:%Char%&set tst=&&if defined lv (set fig=%%t:Maybe a DVD/CDROM&set lv=)
::显示及最后累加计算
if %d% lss 10 (set t=00%d%) else (if %d% geq 10 (if %d% lss 100 (set t=0%d%) else set t=%d%))
if %count%==0 (set /a b+=%a%&if %a% lss 1000 (if %a% geq 100 (set spac= ) else (if %a% geq 10 (set spac= ) else (set spac= ))) else (set spac= )) else (set /a e+=%c%,f+=%d%&if %c% lss 10 (set spac= )else (if %c% geq 100 (set spac= ) else set spac= ))
if %count%==0 (echo %fig:~0,2%%spac%%a% %fig:~2%) else echo %fig:~0,2%%spac%%c%.%t% %fig:~-1%
if %skips% lss %numb% set /a skips+=1 & set Char=&goto loop
if %b% GTR 1024 (set /a e+=%b%/1024,f+=%b%%%1024*1000/1024) else set /a f+=%b%*1000/1024
if %f% GTR 1000 set /a e+=%f%/1000,f=%f%%%1000
if %f% lss 10 (set f=00%f%) else (if %f% geq 10 if %f% lss 100 set f=0%f%)
echo.
echo.
echo -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
echo.
echo Total disk space is %e%.%f% G
echo.
echo _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
echo.
echo.
del disk_volum_e.txt
pause
if %d% lss 10 (set t=00%d%) else (if %d% geq 10 (if %d% lss 100 (set t=0%d%) else set t=%d%))
if %count%==0 (set /a b+=%a%&if %a% lss 1000 (if %a% geq 100 (set spac= ) else (if %a% geq 10 (set spac= ) else (set spac= ))) else (set spac= )) else (set /a e+=%c%,f+=%d%&if %c% lss 10 (set spac= )else (if %c% geq 100 (set spac= ) else set spac= ))
if %count%==0 (echo %fig:~0,2%%spac%%a% %fig:~2%) else echo %fig:~0,2%%spac%%c%.%t% %fig:~-1%
if %skips% lss %numb% set /a skips+=1 & set Char=&goto loop
if %b% GTR 1024 (set /a e+=%b%/1024,f+=%b%%%1024*1000/1024) else set /a f+=%b%*1000/1024
if %f% GTR 1000 set /a e+=%f%/1000,f=%f%%%1000
if %f% lss 10 (set f=00%f%) else (if %f% geq 10 if %f% lss 100 set f=0%f%)
echo.
echo.
echo -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
echo.
echo Total disk space is %e%.%f% G
echo.
echo _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
echo.
echo.
del disk_volum_e.txt
pause
::本文原创,转帖及使用此文章须征得作者同意,由此产生法律问题,后果自负