如何在批处理文件的if语句中获得正确的比较

时间:2019-05-16 15:46:04

标签: batch-file

im创建一个批处理文件,该文件检查日志文件是否比以前大,如果不是,它将调用监视器开始,但是我无法使if块正常工作,它位于if定义的块中,但没有转到else部分,它总是失败,因为它没有值。

我尝试使用延迟扩展,但是它要么没有值,要么尝试使用变量名求值,但是如果我在if定义的块中仅使用一行,则可以使用。

REM @echo off
REM SETLOCAL EnableDelayedExpansion 
FOR /F %%i in ('dir /b/a-d/od/t:c omcp_*.log') do set FILENAME=%%i
FOR /F "usebackq" %%A IN ('%FILENAME%') DO set SIZE=%%~zA
IF DEFINED LASTFILENAME (
    IF %FILENAME% == %LASTFILENAME% (
        if DEFINED LASTSIZE (
            IF %SIZE%==%LASTSIZE% ( echo "subir monitor") else ( echo  "no subir monitor" )
        )
    )
) 
set LASTFILENAME=%FILENAME%
set LASTSIZE=%SIZE%

REM setx LASTFILENAME=%FILENAME%
REM setx LASTSIZE=%SIZE%

它应该在第一次运行中设置变量,并在第二次运行中显示“无子监视器” 谢谢

1 个答案:

答案 0 :(得分:0)

对于每个比较,请使用IF "%FILENAME%" == "%LASTFILENAME%"(-用引号引起的值可以克服未定义的问题,从而产生语法错误。它还可以容纳文件名中的空格,并且可以删除if定义的保护符。BTW- set "FILENAME=%%i"&set "size=%%~zi"应该适当设置大小-用引号确保分配的值正确定界