0

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.

2
  • 1
    As pointed out by @Compo at review. The ones prefixed with 0 are being treat as octal. This works up to 7 and have the equivalent value. 08 becomes an invalid octal so I presume it's then being treat as a string. Commented Aug 5 at 12:44
  • 2
    Please take a look at this answer if you want to better understand the use of the comparison operators EQU, NEQ, LSS, LEQ, GTR, and GEQ. Commented Aug 5 at 12:59

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.