在DOS /批,08小於1,但在DOS/Batch中07大於1。爲什麼?
if 08 lss 1 echo true
呼應 「真」。這同樣適用於09兩個08和09都小於1。
然而,
if 07 lss 1 echo true
沒有任何迴音。 01至07不小於1.
爲什麼? 08和09有什麼特別之處?
在DOS /批,08小於1,但在DOS/Batch中07大於1。爲什麼?
if 08 lss 1 echo true
呼應 「真」。這同樣適用於09兩個08和09都小於1。
然而,
if 07 lss 1 echo true
沒有任何迴音。 01至07不小於1.
爲什麼? 08和09有什麼特別之處?
通常,前導0
表示您想要在octal中解析該號碼。我希望08
或09
實際上是一個錯誤條件;也許批處理語言沒有一個好的機制來表示輸入是不正確的?
08和09是非法的。在八進制中,7是最高的法定數字。零的前導數字表示以八進制表示的數字。
延伸的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
好了,你還挺希望他們知道,前導零自動將意味着八進制(一我討厭C的錯誤特徵以及所有從它下降並犯下相同錯誤的語言)。 – Joey