在Windows CMD中使用带有前导零比较的IF语句

时间:2015-03-09 14:21:38

标签: cmd

在使用指定了数值的IF语句时,我发现了以下行为:

C:\> if 09 GEQ 1 echo YES
C:\>

我完全理解,在alfabetical方法中,上述陈述是错误的。但是,所有这些都是数字,虽然其中一个以零为前缀,这是一个数学上不寻常的情况。不过,这是一个数字。

IF-help页面告诉我: (..)这些比较是通用的,因为如果string1和 string2都包含所有数字,然后是字符串 转换为数字并执行数字比较。 (..)

我认为这种情况适用,因为我只有数字,因此应该应用数字比较,而不是按字母顺序排列。

其他比较工作正常

C:\> if 09 GEQ 01 echo YES
C:\> YES

C:\> if 10 GEQ 1 echo YES
C:\> YES

C:\> if 9 GEQ 1 echo YES
C:\> YES

C:\> if 22 GEQ 5 echo YES
C:\> YES
你怎么看?如果提出第一个IF声明,就会做出反应。或者不是?

2 个答案:

答案 0 :(得分:0)

数字前导0会导致cmd.exe在使用比较或数学时将数字解释为八进制(参见set /?)。

C:\>@if 012 EQU 10 echo Yes
Yes

答案 1 :(得分:-1)

通过添加0,IF将09视为字符串,这将导致和未定义的结果。

删除0以执行数字比较。