【问题标题】:Calculate used disk space in batch file计算批处理文件中的已用磁盘空间
【发布时间】:2016-01-21 13:28:45
【问题描述】:

我使用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 但我不知道如何正确实施。

【问题讨论】:

  • 使用SET /A从另一个变量中减去一个变量。
  • 对不起,我完全不明白。你怎么做到这一点?也许您可以发布答案建议?
  • 另外,如果有人能告诉我为什么我在这个问题上得到负面评价。我已经进行了研究,我已经设法解决了问题的某些部分,并且我已经正确解释了。
  • 在您的问题上下文中(获得已用 磁盘空间),您似乎没有进行任何研究。你甚至没有谷歌如何使用set 命令,它会告诉你如何使用/a 标志。
  • 感谢您告诉我。我实际上做了很多研究,我找到了一些信息,但我不确定如何使用这些信息。

标签: windows batch-file command-line


【解决方案1】:

替换这个:

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)

用这个:

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

您的原始文件无缘无故地分配了disktotaldiskavail 的值——这是多余的,因为它们已经被之前的for 分配了。

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

【讨论】:

  • 这可能有点离题,但你知道为什么尺寸信息与 Windows 资源管理器显示的不同吗?
  • 传统上在计算中,1024 字节 = 1Kb; 1024*1024=1Mb,1024*1024*1024=1Gb。这些有时被称为“千字节、兆字节、千兆字节”。您的计算只是除以 10^9 并使用常见的解释。因此有 2+% 的差异。营销人员通常使用通用术语而不是行业或行话术语,因为它会导致更高的数字,从而使内存/驱动器大小/其他任何东西在不知情的情况下看起来更大。批处理数学仅限于小于 2^31 的整数,因此必须进行更复杂的排列以使数字在行话中准确。
【解决方案2】:

bc = Batch calculator
邮件发送 = 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多