Аскет, задавая вопрос ответа я не знал, ошибка была устранена наугад,
её причину сразу не мог понять (первой мыслью было существование в командных файлах опрации «запятая» как в Си-подобных языках).
О решении с кавычками я знал, но мне было интересно обойтись без них;
с кавычками могут быть свои трудности…
Аскет пишет:Всё логично же...
А по-моему, не очень.
Не следует безоговорочно доверять справке: иногда в ней встречаются ошибки и часто — упрощения и приблизительности.
Во-первых (в-нулевых), случай, когда строки заданы явно, — надуман: нет пользы задавть оба операнда явно, а если уж взять в кавычки один, то надо и второй.
Во-вторых, из сказанного вовсе формально не следует твое умозаключение, это лишь «добрый совет» (не всегда такой уж и добрый…). Более того, с правильной точки зрения операнд не заключается в кавычки, а кавычки становятся частью операнда (
if a=="a" (echo TRUE) else echo FALSE
возвратит «FALSE»)
и могут быть не только внешними, но и находится внутри операндов при условии сохранения чётности и того, что пробельные символы, к которым во встроенных командах CMD.EXE приравнены запятые и точки с запятой, попадают между кавычек так, что операнды не распадаются на части, например
set A=a" b "c
if %A%==%A% echo TRUE& rem Условие истинно
if "%A%"=="%A%" echo TRUE& rem Синтаксическая ошибка
Правда, при использовании отложенного раскрытия переменных команда, подобная последней , сработает, т.к., в этом случае вначале проверяется синтаксис команды, а уж затем в неё подставляется значение переменной, так что в этом случае совет использовать кавычки и можно считать добрым (хотя, опять же, всё зависит от обоих операндов).