计算批处理文件中的已用磁盘空间

时间:2016-01-21 13:28:45

标签: windows batch-file command-line

我使用this问题来获取磁盘大小信息。 我是批处理编程的新手,所以请耐心等待。

@echo off & setlocal ENABLEDELAYEDEXPANSION
SET "volume=C:"
FOR /f "tokens=1*delims=:" %%i IN ('fsutil volume diskfree %volume%') DO (
    SET "diskfree=!disktotal!"
    SET "disktotal=!diskavail!"
    SET "diskavail=%%j"
)
FOR /f "tokens=1,2" %%i IN ("%disktotal% %diskavail%") DO SET "disktotal=%%i"& SET "diskavail=%%j"
(ECHO(Information for volume %volume%
ECHO(TOTAL SIZE  ---------- %disktotal:~0,-9% GB
ECHO(AVAILABLE SIZE ------- %diskavail:~0,-9% GB)
pause

结果如下:

Information for volume C:
TOTAL SIZE  ---------- 240 GB
AVAILABLE SIZE ------- 135 GB

如何通过从总大小中减去可用大小来计算已用磁盘空间?我知道我必须使用SET命令和/A,但我不知道如何正确实现它。

2 个答案:

答案 0 :(得分:5)

替换它:

SET /a diskused=%disktotal:~0,-9% - %diskavail:~0,-9%
ECHO(Information for volume %volume%
ECHO(TOTAL SIZE  ---------- %disktotal:~0,-9% GB
ECHO(AVAILABLE SIZE ------- %diskavail:~0,-9% GB
ECHO(USED SIZE ------------ %diskused% GB

用这个:

disktotal

您的原文无缘无故地分配diskavailfor的值 - 这是多余的,因为它们已经被前一个{{1分配了}}

使用set /a进行计算,从总计中减去可用的总数,以GB为单位。

答案 1 :(得分:0)

bc = Batch calculator
mailsend = MailSend

@ECHO off
REM =========Funzione da Windows 2003 SP2 in poi===========

SETLOCAL EnableExtensions
SETLOCAL EnableDelayedExpansion

%~d0
cd %~p0

FOR %%v 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 %%v\ (

SET liberi=0
SET totali=0
SET k=1
FOR /F "tokens=2 delims=:"  %%a IN ('fsutil volume diskfree %%v') DO (
    IF !k!==1 SET liberi=%%a
    IF !k!==2 SET totali=%%a
    SET /A k = !k! + 1
)


echo 100 * !liberi! / !totali!|bc>"%temp%\vai.txt"
set /p percentuale=<"%temp%\vai.txt"

IF !percentuale! LEQ 3 (mailsend.exe -t recipient@email.com -f sender@gmail.com -ssl -port 465 -auth -smtp smtp.gmail.com -user sender@gmail.com -pass YourGmailPassword -sub "[%computername%]Mancanza di spazio libero"  -M "Il Volume %%v ha spazio libero inferiore al 3%%")

)

)

DEL "%temp%\vai.txt"