Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 计算批处理文件中使用的磁盘空间_Windows_Batch File_Command Line - Fatal编程技术网

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

Windows 计算批处理文件中使用的磁盘空间,windows,batch-file,command-line,Windows,Batch File,Command Line,我用这个问题来获取磁盘大小信息。 我是批处理编程新手,所以请耐心等待 @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 "disk

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

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

替换此:

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
您的原始版本无缘无故地将分配
disktotal
diskavail
的值当成了一顿大餐-这是多余的,因为它们已经被前一个
分配给了

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

bc=
邮件发送=

@ECHO关闭
REM===========poi中的Funzione da Windows 2003 SP2===========
setLocalEnableExtensions
SETLOCAL EnableDelayedExpansion
%~d0
cd%~p0
对于%%v英寸(c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:)的(
如果存在%%v\(
设置liberi=0
设置totali=0
设置k=1
对于/F“tokens=2 delims=:”%%a IN('fsutil volume diskfree%%v')DO(
如果!k!==1集自由=%%a
如果!k!==2集总计i=%a
SET/ak=!k!+1
)
echo 100*!liberi!/!totali!| bc>%temp%\vai.txt

set/p percentuale=使用
set/A
从另一个变量中减去一个变量。对不起,我不完全理解。你是怎么做到的?也许你可以发布一个答案建议?如果有人能给我一个提示,说明为什么我在这个问题上得到了负面评价。我已经做了研究,我已经设法解决了问题的某些部分,我有e正确地解释。在您的问题的上下文中(使用磁盘空间),似乎你没有做过任何研究。你甚至没有用谷歌搜索如何使用
set
命令,该命令会准确地告诉你如何使用
/a
标志。谢谢你告诉我。事实上,我已经做了很多研究,找到了一些信息,但我不确定如何使用这些信息。这可能有点困难但您知道为什么大小信息与windows资源管理器显示的不同吗?传统上,在计算中,1024字节=1Kb;1024*1024=1Mb,1024*1024*1024=1Gb。这些信息有时被称为“Kilibyte、Megibyte、Gigibyte”。您的计算只需除以10^9,并使用常见的解释。因此存在2%的差异。市场营销人员通常使用通用术语,而不是行业术语或行话术语,因为这会导致更高的数字,使ram/驱动器大小/任何在不知情的人看来更大的值。批量数学仅限于小于2^31的整数,因此更复杂必须作出适当安排,以使这些数字在术语上准确无误。
@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"