In Batch Script, when comparing a 2 digit number to a 1 digit number 08 & 09 are treated as low numbers but everything else works as expected.
So if you run the following:
IF 01 LEQ 1 ECHO 01
IF 02 LEQ 1 ECHO 02
IF 07 LEQ 1 ECHO 07
IF 08 LEQ 1 ECHO 08
IF 09 LEQ 1 ECHO 09
IF 10 LEQ 1 ECHO 10
You get the output:
01
08
09
The GEQ operator has similar results, run the following:
IF 01 GEQ 1 ECHO 01
IF 02 GEQ 1 ECHO 02
IF 07 GEQ 1 ECHO 07
IF 08 GEQ 1 ECHO 08
IF 09 GEQ 1 ECHO 09
IF 10 GEQ 1 ECHO 10
You get the output:
01
02
07
10
If you swap out the 1 for other numbers, like in the title 4, then it always treats 08 & 09 as low numbers between 0 & 1. Comparing with another 2 digit number, padded with a zero provides the correct results. e.g. 04 works as expected, it's less than 08 & 09.
The following script can be used to test this:
@ECHO OFF
SET COMP=%1
ECHO.
ECHO LEQ %COMP%
ECHO.
IF 00 LEQ %COMP% ECHO 00
IF 01 LEQ %COMP% ECHO 01
IF 02 LEQ %COMP% ECHO 02
IF 03 LEQ %COMP% ECHO 03
IF 04 LEQ %COMP% ECHO 04
IF 05 LEQ %COMP% ECHO 05
IF 06 LEQ %COMP% ECHO 06
IF 07 LEQ %COMP% ECHO 07
IF 08 LEQ %COMP% ECHO 08
IF 09 LEQ %COMP% ECHO 09
IF 10 LEQ %COMP% ECHO 10
IF 11 LEQ %COMP% ECHO 11
IF 12 LEQ %COMP% ECHO 12
IF 13 LEQ %COMP% ECHO 13
IF 14 LEQ %COMP% ECHO 14
IF 15 LEQ %COMP% ECHO 15
IF 16 LEQ %COMP% ECHO 16
IF 17 LEQ %COMP% ECHO 17
IF 18 LEQ %COMP% ECHO 18
IF 19 LEQ %COMP% ECHO 19
IF 20 LEQ %COMP% ECHO 20
ECHO.
ECHO.
ECHO GEQ %COMP%
ECHO.
IF 00 GEQ %COMP% ECHO 00
IF 01 GEQ %COMP% ECHO 01
IF 02 GEQ %COMP% ECHO 02
IF 03 GEQ %COMP% ECHO 03
IF 04 GEQ %COMP% ECHO 04
IF 05 GEQ %COMP% ECHO 05
IF 06 GEQ %COMP% ECHO 06
IF 07 GEQ %COMP% ECHO 07
IF 08 GEQ %COMP% ECHO 08
IF 09 GEQ %COMP% ECHO 09
IF 10 GEQ %COMP% ECHO 10
IF 11 GEQ %COMP% ECHO 11
IF 12 GEQ %COMP% ECHO 12
IF 13 GEQ %COMP% ECHO 13
IF 14 GEQ %COMP% ECHO 14
IF 15 GEQ %COMP% ECHO 15
IF 16 GEQ %COMP% ECHO 16
IF 17 GEQ %COMP% ECHO 17
IF 18 GEQ %COMP% ECHO 18
IF 19 GEQ %COMP% ECHO 19
IF 20 GEQ %COMP% ECHO 20
ECHO.
ECHO.
ECHO EQU %COMP%
ECHO.
IF 00 EQU %COMP% ECHO 00
IF 01 EQU %COMP% ECHO 01
IF 02 EQU %COMP% ECHO 02
IF 03 EQU %COMP% ECHO 03
IF 04 EQU %COMP% ECHO 04
IF 05 EQU %COMP% ECHO 05
IF 06 EQU %COMP% ECHO 06
IF 07 EQU %COMP% ECHO 07
IF 08 EQU %COMP% ECHO 08
IF 09 EQU %COMP% ECHO 09
IF 10 EQU %COMP% ECHO 10
IF 11 EQU %COMP% ECHO 11
IF 12 EQU %COMP% ECHO 12
IF 13 EQU %COMP% ECHO 13
IF 14 EQU %COMP% ECHO 14
IF 15 EQU %COMP% ECHO 15
IF 16 EQU %COMP% ECHO 16
IF 17 EQU %COMP% ECHO 17
IF 18 EQU %COMP% ECHO 18
IF 19 EQU %COMP% ECHO 19
IF 20 EQU %COMP% ECHO 20
It would appear that 08 & 09 are being compared like string but why would 07 not be compared as a string if that is the case.
EQU,NEQ,LSS,LEQ,GTR, andGEQ.