@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
::統計可用驅動器碟符,磁碟剩餘容量
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
:tsdir %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)
:ttif %recv% lss 1073 (goto small) else (if %recv% equ 1073 (goto equal) else goto greater)
:small
if %count%==0 (goto s1) else goto s2
:s1if 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
::賦予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 ***/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
::本文原創,**及使用此文章須徵得作者同意,由此產生法律問題,後果自負
磁碟空間滿了情況處理
今天伺服器無法操作,檢視磁碟資訊,記憶體資訊,cpu資訊都是滿的,重啟後,都說磁碟滿了,無法寫device,用命令 df i檢視inodes資訊,發現inodes已用盡。df h磁碟空間沒有滿 使用命令可以檢視各個資料夾的大小排序 進入對應資料夾進行查詢,排序前12條,查詢大資料夾 du hm ma...
linux磁碟空間不足處理
今天往centos虛擬機器拖檔案,報錯 卷檔案系統根目錄僅剩餘0位元組 記錄一下相關解決方法。檢視了自己的設定,已設定為最大容量,所以未採用此方法。命令如下 發現根目錄分割槽磁碟占用已達100 查詢相關資料,可用方法3。由於虛擬機器內未儲存太多檔案,感覺問題沒有這麼簡單,所以暫未採用此方法。檢視ro...
Linux磁碟空間檢視及空間滿的處理
如果要檢視磁碟還剩多少空間,當然是用df的命令了。root localhost df h 檔案系統 容量 已用 可用 已用 掛載點 dev sda2 14g 11g 2.6g 82 dev sda1 99m 14m 81m 14 boot tmpfs 442m 275m 168m 63 dev sh...