If else条件下批处理脚本的异常行为

时间:2012-11-30 15:24:59

标签: windows if-statement batch-file

作为批处理文件编程的初学者,我创建了一个批处理文件。以下是代码段 -

SET INDEX=1
SET CURRJOBS=10
REM TOTALJOBS and CURRJOBS are dynamic but to keep code here, i have put static values to them
SET TOTALJOBS=1000
IF [%CURRJOBS%] LSS [%TOTALJOBS%] (

    IF [%INDEX%] GEQ [5] (
        SET /A INDEX=0
    )

    ECHO Started at %date% %time% with %CURRJOBS% jobs>>%CURRDIR%\JobSubmit.log
    REM Here is a call to another bat file with Index.
    ECHO Finished at %date% %time% with %CURRJOBS% jobs>>%CURRDIR%\JobSubmit.log
    SET /A INDEX+=1
    GOTO START
)ELSE (
   ECHO Finished at %date% %time% with %CURRJOBS% jobs>>%CURRDIR%\JobSubmit.log
)

现在,这段代码有时可以工作,有时却不行。 但是有一些语法错误可能导致行为异常。是否有任何IDE或在线实用程序来检查批处理文件的语法?

上面的代码有什么问题?

1 个答案:

答案 0 :(得分:2)

IF命令中的比较有两种类型:字符串或数字。为了表明我们想要进行数字比较,必须编写没有附加字符的数字。所以,你的代码应该这样写:

IF %CURRJOBS% LSS %TOTALJOBS% (
    IF %INDEX% GEQ 5 (
        SET /A INDEX=0
    )

当变量或参数可能具有空值时,通常将其括在引号之间以避免语法错误,例如:

IF "%POSSIBLEEMPTYVAR%" NEQ "" (

如果变量具有字符串值,则可以使用相同的格式检查空值并进行比较:

IF "%VARIABLE%" equ "THIS VALUE" GOTO OK

但是,如果变量可能为空并且您想将其作为数字进行比较,则必须进行两次测试。