批處理寫的磁碟空間計算程式

2021-05-01 06:41:07 字數 3864 閱讀 9707

@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...