Общий пакетный парсер идентифицирует команду set
, вызывает внутреннюю функцию asociated, которая видит переключатель /A
и делегирует всю работу другому анализатору, который обрабатывает арифметический синтаксис.
Источником поведения является синтаксис, разрешенный арифметическим парсером set /a
. Хотя это кажется очевидным, что set /a 3n2+=1
добавляет один к переменной, set /?
помощь государства,
- Синтаксис арифметических набор операций
set /a expression
=
оператор
То есть, в то время как set /a
может и обычно используется, чтобы установить значение переменной, он позволяет вещи как set /a 1+1
, без какой-либо переменной. Переменные - это только один операнд, используемый оператором присваивания.
Когда арифметический синтаксический анализатор начинает свою работу, одна из первых операций (после удаления цитаты, обрезка исходного пространства ...) заключается в проверке, является ли следующий символ для обработки в строке ввода цифрой, и если это , парсер предполагает, что числовой операнд найден, и для работы требуется преобразование из текста команды ввода в число, и здесь возникает ошибка, так как 3n2
не может быть преобразован в число.
Конечно, если текст может быть преобразован в число и без ошибок преобразования не вызывает,
set /a 123=1
мы также найдем и ошибки, отсутствующий оператор.Данные в левой части знака равенства идентифицируются как число, а число не может быть помещено как левая сторона оператора присваивания (требуется переменная), синтаксический анализатор ожидает другого оператора, который не может быть найден ,
похож (более очевидный) случай
set /a =123+1
где мы получим недостающую ошибку операнда: знак равенства является бинарным оператором, а левый операнд не может быть найден.
Я не думаю, что код, который вы опубликовали, может генерировать эту ошибку, если условие IF является ложным. Это сообщение об ошибке генерируется только в том случае, если выполняется команда SET/A, чего не может быть, если выражение ложно. Оператор всегда анализируется, но он выполняется только в том случае, если условие истинно. – dbenham