ano*_*mal 2 comparison numbers dos batch-file
在DOS/Batch中
if 08 lss 1 echo true
Run Code Online (Sandbox Code Playgroud)
回应"真实".这同样适用于09. 08和09都小于1.
然而,
if 07 lss 1 echo true
Run Code Online (Sandbox Code Playgroud)
没有回应什么.01至07不小于1.
为什么?08和09有什么特别之处?
扩展了sarnold和David Schwartz已经提供的答案......
我从未见过任何文档声明IF支持八进制或十六进制数字表示法.但是你的问题促使我做了一些测试,实际上它确实支持SET/A支持的相同数字符号.
任何不满足上述3个数字符号中的任何一个的字符集都被视为字符串.
如果比较的两边都是有效数字,则进行数字比较.
如果任何一方不是有效数字,则进行字符串比较.
07是十进制值为7的有效八进制表示法,不小于1.
08和09的前缀为0但不是有效的八进制表示法,因此进行字符串比较.任何以0开头的字符串将排序为小于以1开头的字符串.
一些有趣的测试确认支持八进制和十六进制表示法.
if 0xA equ 10 echo ok
if 011 equ 9 echo ok
Run Code Online (Sandbox Code Playgroud)
有趣的是,SET/A语句中的无效八进制或十六进制表示法会引发错误.但IF语句中的无效八进制或十六进制表示法不会引发错误.它只是强制进行字符串比较.
更新
有效号码前面可能带有符号指示符: - 或+
if +0xA equ +10 echo ok
if -011 equ -9 echo ok
Run Code Online (Sandbox Code Playgroud)