Windows 批次中LSS/LEQ比较的问题

Windows 批次中LSS/LEQ比较的问题,windows,batch-file,cmd,wmic,Windows,Batch File,Cmd,Wmic,我想检查C:驱动器是否至少还有一定的存储空间(在本例中为60GB),如果没有,则停止执行。但我一直坚持CMD告诉我160000不到60000,我不明白为什么 代码如下: @echo off & setlocal enableextensions enabledelayedexpansion :: If disk space is less than this value, script will not be executed SET DISK_SPACE_ERROR_AMOUNT_M

我想检查C:驱动器是否至少还有一定的存储空间(在本例中为60GB),如果没有,则停止执行。但我一直坚持CMD告诉我160000不到60000,我不明白为什么

代码如下:

@echo off & setlocal enableextensions enabledelayedexpansion

:: If disk space is less than this value, script will not be executed
SET DISK_SPACE_ERROR_AMOUNT_MB=60000

FOR /f "tokens=3" %%i IN ('dir /-c^|findstr /c:"bytes free"') DO SET "Free=%%i"
:: Free contains the bytes of storage left

SET /A DiskFreeKB=%Free:~,-3%
SET /A DiskFreeMB=%DiskFreeKB%/1024

echo Disk Space Check:
echo %DiskFreeKB% KB
echo %DiskFreeMB% MB

echo Err amount %DISK_SPACE_ERROR_AMOUNT_MB%

IF "%DiskFreeMB%" LSS %DISK_SPACE_ERROR_AMOUNT_MB% (
    :: DiskFreeMB less than error amount
    echo.
    echo ERROR
    echo Not enough space left - %DiskFreeMB% MB of the required minimum of %DISK_SPACE_ERROR_AMOUNT_MB% MB
    echo ERROR
    echo.
    
    PAUSE
    EXIT 1
) ELSE (
    echo Disk space is ok
    :: (Continue with other code)
)
这是控制台的输出:

我建议改为使用差异


从所需的最小数量中减去可用空间,如果是
,我建议使用差值

从所需的最小数量中减去可用空间,如果是
,我建议您使用:
@“%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@在这里输入你的代码
@回显足够的空间并暂停
如果你愿意,你可以美化它

@“%\uuuuuAppDir\uuuuuwbem\WMIC.exe”卷,其中^
“DriveLetter='%SystemDrive%'和FreeSpace>='6000000000'”^
获取FreeSpace 2>num |“%uuu AppDir_uuuu%findstr.exe”“[0-9]”1>num |退出1
@在这里输入你的代码
@回显足够的空间并暂停
在这两个示例中,最后两行用于提供信息。

我建议您在执行此任务时使用:
@“%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@在这里输入你的代码
@回显足够的空间并暂停
如果你愿意,你可以美化它

@“%\uuuuuAppDir\uuuuuwbem\WMIC.exe”卷,其中^
“DriveLetter='%SystemDrive%'和FreeSpace>='6000000000'”^
获取FreeSpace 2>num |“%uuu AppDir_uuuu%findstr.exe”“[0-9]”1>num |退出1
@在这里输入你的代码
@回显足够的空间并暂停

在这两个示例中,最后两行用于提供信息。

删除
%DiskFreeMB%
..@JosefZ周围的引号谢谢,我已经删除了them@aschipfl不幸的是,这并没有改变任何事情好吧,
如果“%DiskFreeMB%”lss%DISK\u SPACE\u ERROR\u AMOUNT\u MB%
永远都不可能为真,因为引号也是比较表达式的一部分,它们被视为字符串…删除
%DiskFreeMB%
周围的引号…@JosefZ谢谢,我已经删除了them@aschipfl不幸的是,这并没有改变任何事情好吧,
如果“%DiskFreeMB%”lss%DISK\u SPACE\u ERROR\u AMOUNT\u MB%
永远不可能为真,因为引号也是比较表达式的一部分,它们当时被视为字符串…我现在得到的错误
命令的语法不正确。
。我修改过的IF如下所示:
SET/A ErrorDelta=%DiskFreeMB%-%DISK\u SPACE\u ERROR\u AMOUNT\u MB%IF%ErrorDelta%LEQ 0(echo Out Out SPACE)
我现在收到错误
命令语法不正确。
。我修改的IF如下所示:
SET/A ErrorDelta=%DiskFreeMB%-%DISK\u SPACE\u ERROR\u AMOUNT\u MB%IF%ErrorDelta%LEQ 0(回显空间不足)
SET /A delta=%DiskFreeMB% - %DISK_SPACE_ERROR_AMOUNT_MB%
if %delta% LEQ 0 ( echo Out of Space )
@echo off
echo Test1:  Sufficient Disk Space
set DiskFreeMB=600
set DISK_SPACE_ERROR_AMOUNT_MB=500
SET /A ErrorDelta=%DiskFreeMB% - %DISK_SPACE_ERROR_AMOUNT_MB%
if %ErrorDelta% LEQ 0 ( echo Out of Space )
echo.

echo Test2: Not enough space.
set DiskFreeMB=400
set DISK_SPACE_ERROR_AMOUNT_MB=500
SET /A ErrorDelta=%DiskFreeMB% - %DISK_SPACE_ERROR_AMOUNT_MB%
if %ErrorDelta% LEQ 0 ( echo Out of Space )
echo.

echo Test2: Exactly Full
set DiskFreeMB=500
set DISK_SPACE_ERROR_AMOUNT_MB=500
SET /A ErrorDelta=%DiskFreeMB% - %DISK_SPACE_ERROR_AMOUNT_MB%
if %ErrorDelta% LEQ 0 ( echo Out of Space )
echo.
Test1:  Sufficient Disk Space

Test2: Not enough space.
Out of Space

Test2: Exactly Full
Out of Space