Вдохновленный 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 не равен И не меньше И не больше, чем string2_ все одновременно (и, как это явно не число (в смысле, cmd' - это означает не 32-битный INT), я бы ожидал, что он будет обрабатываться как строка). «echo on» наглядно показывает, что усечение или преобразование не происходит, поэтому, похоже, это не проблема с 'cmd', а проблема с' if'. Я хотел бы понять, что происходит и почему. – Stephan
[Соответствующий вопрос] (http://stackoverflow.com/q/34491952/2152082) – Stephan