我使用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
,但我不知道如何正确实现它。
答案 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
您的原文无缘无故地分配diskavail
和for
的值 - 这是多余的,因为它们已经被前一个{{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"