在DOS /批,
if 08 lss 1 echo true
呼应“真”。 这同样适用于09两个08和09都小于1。
然而,
if 07 lss 1 echo true
没有任何回音。 01至07是不小于1。
为什么? 特别之处是08和09?
在DOS /批,
if 08 lss 1 echo true
呼应“真”。 这同样适用于09两个08和09都小于1。
然而,
if 07 lss 1 echo true
没有任何回音。 01至07是不小于1。
为什么? 特别之处是08和09?
通常情况下,一家领先的0
表示你想在被解析数八进制 。 我预计08
或09
实际上是一个错误条件 ; 或许是批处理语言没有一个很好的机制,以表明输入是不正确的?
延伸的sarnold和大卫·施瓦茨已经提供的答案...
我从来没有见过,指出,如果支持八进制或十六进制数字,符号的任何文件。 但是你的问题促使我做一些测试,而事实上它确实支持SET / A支持相同的数字符号。
任何一组不满足上述任何3个数字符号的字符将被视为一个字符串。
如果比较的两边都是有效的数字,那么数字做出比较。
如果任何一方不是一个有效的数字,然后用一个字符串做出比较。
07是一个有效的八进制符号具有7十进制值,它是不小于1。
08和09的前缀为0,但不是有效的八进制,所以字符串比较时。 任何以0开头的字符串将整理小于从1开始的字符串。
一些有趣的测试,以确认八进制和十六进制表示支持。
if 0xA equ 10 echo ok
if 011 equ 9 echo ok
它是轻度有趣的是,在SET无效八进制或十六进制格式/ A陈述引发错误。 但是,在一个IF语句无效八进制或十六进制表示不会引发错误。 它只是强制字符串比较。
更新
有效的电话号码可以被前面有一个符号指示符: - 或+
if +0xA equ +10 echo ok
if -011 equ -9 echo ok
08和09都是非法的。 在八进制,7是最高的法律位。 的零引线数字表示表示为八进制的数。