受this question的啓發和它的答案,我做了一些測試。 一個答案表明,數字太大(超出32位整數),它們會被截斷,但這並不能解釋結果。顯然,它不會比較雙方的字符串(正如我所預料的那樣)。看起來if
感到困惑,並認爲「好吧,我不知道 - 給它一個真實的」。 (使用neq
,gtr
,lss
而不是equ
,geq
,leq
總是給出錯誤)。奇怪的結果與IF
如果任何a
和/或b
位於32位整數的邊界內或包含[0-9]中的任何字符,則代碼將按預期工作。
@echo off
set a=333333333333
set b=444444444444
call :compare
set b=222222222222
call :compare
goto :eof
:compare
echo comparing %a% with %b%
if %a% geq %b% (echo a ^>= b) else (echo -)
if %b% geq %a% (echo b ^>= a) else (echo -)
if %a% leq %b% (echo a ^<= b) else (echo -)
if %b% leq %a% (echo b ^<= a) else (echo -)
if %a% equ %b% (echo a = b) else (echo -)
if %a% == %b% (echo a == b) else (echo -)
這是否有任何合乎邏輯的解釋,還是僅僅是我們不得不忍受的事情?
你期待什麼發生?鏈接回到「這個問題」並沒有提供背景使這成爲一個獨立的問題。 – Teepeemm
我希望或者是一個字符串比較或者一個錯誤消息,但是**不是** _string1不等於AND並不小於AND不大於string2_所有在同一時間(並且它顯然沒有數字(從某種意義上說, cmd「的作品 - 這意味着不是一個32位INT),我希望它被作爲字符串處理)。 'echo on'清楚地表明,沒有截斷或轉換髮生,所以它似乎不是'cmd'解析問題,而是'if'本身的問題。我想了解,發生了什麼,爲什麼。 – Stephan
[相關問題](http://stackoverflow.com/q/34491952/2152082) – Stephan