ravi
ravi

Reputation: 6328

Abnormal behavior of batch script in If else condition

As a beginner in batch file programming, i have created a batch file. Below is the code snippet-

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
)

Now, this code, sometimes work, sometimes not. however there is some syntax error which might be a cause to behave abnormally. Is there any IDE or online utility to check the syntax of batch file?

What is wrong with above code?

Upvotes: 0

Views: 387

Answers (1)

Aacini
Aacini

Reputation: 67216

Comparisons in IF command are of two types: string or number. To indicate IF that we want number comparison, the numbers must be written with no additional characters. So, your code should be written this way:

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

When a variable or parameter may have an empty value, it is customary to enclose it between quotes to avoid syntax errors, for example:

IF "%POSSIBLEEMPTYVAR%" NEQ "" (

If the variable have string values, you may use the same format for both check for empty value and do the comparison:

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

However, if a variable may be empty and you want to compare it as number, both tests must be made.

Upvotes: 2

Related Questions