受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