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

在Windows CMD中使用带前导零比较的IF语句,cmd,Cmd,使用指定了数值的IF语句时,我发现以下行为: C:\> if 09 GEQ 1 echo YES C:\> 我完全理解,在阿尔法贝蒂法中,上述说法是错误的。但是,所有这些都是数字,尽管其中一个前缀是零,但在数学上是不寻常的。不过,这是一个数字 IF帮助页面告诉我: (..)这些比较是通用的,因为如果string1和 string2都由所有数字组成,那么字符串是 转换为数字并执行数字比较。 (……) 我认为这种情况适用,因为我只有数字,因此应该应用数字比较,而不是按字母顺序 其他比较

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

C:\> if 09 GEQ 1 echo YES
C:\>
我完全理解,在阿尔法贝蒂法中,上述说法是错误的。但是,所有这些都是数字,尽管其中一个前缀是零,但在数学上是不寻常的。不过,这是一个数字

IF帮助页面告诉我: (..)这些比较是通用的,因为如果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陈述被提出,那么就做出这样的反应。是否?

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


删除
0
以执行数字比较。

在数字上引入0会导致cmd.exe在使用比较或数学时将数字解释为八进制(请参见
设置/?


我在开场白中已经说过,我知道这是导致这种行为的原因,没有必要重复。我的问题不同,这很有趣。。。但是09在八进制中不是一个有效的数字。在这种情况下,他应该回答一个语法错误。我肯定他把“09”读作一个数字变量,而不是八进制。另外,设置帮助页面与IF命令的相关性如何?我知道他们之间有关系,但除非按字面意思指定,否则这是专家的元信息。缺乏cmd.exe的明确文档并不是什么新鲜事。语法错误可能会破坏一些东西。您可能是对的,09被解释为文本。但是在任何情况下,我都建议将cmd.exe放在后面,使用PowerShell。cmd和PowerShell之间最大的区别是什么?它们是完全分开的。PowerShell是一种基于.NET Framework的全新命令shell和脚本语言。关于PowerShell有很多可用的信息。我问了这个问题,希望得到一个与本文中的问题相关的答案。我的问题是:PowerShell如何防止这个线程的问题,因为PS更好,它如何做到“更好”?
C:\>@if 012 EQU 10 echo Yes
Yes