0

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

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 或在线实用程序来检查批处理文件的语法?

上面的代码有什么问题?

4

1 回答 1

2

IF 命令中的比较有两种类型:字符串或数字。为了指示我们想要数字比较的 IF,数字必须写成没有额外的字符。所以,你的代码应该这样写:

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

当变量或参数可能有空值时,习惯上用引号将其括起来以避免语法错误,例如:

IF "%POSSIBLEEMPTYVAR%" NEQ "" (

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

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

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

于 2012-11-30T16:16:14.157 回答