Как указывали здесь другие, ваша проблема заключается в том, что вы установили переменную с именем var
, а затем попытались прочитать переменную с именем answer
. Корневое исправление состоит в том, чтобы выбрать одно имя и придерживаться его. Однако я хочу предложить еще два указателя.
Во-первых, при отладке пакетного файла удалите строку @echo off
из его верхней части. Включив эхо, вы сможете увидеть, какая именно строка выполнялась, когда вы получили ошибку, что поможет вам быстрее найти решение.
Во-вторых, причиной завершения работы вашего пакетного файла была синтаксическая ошибка. Если переменная answer
не установлена, ваш оператор if
оценивается как
if == 1 goto nothing
Это недопустимый пакетный синтаксис, который вызвал ошибку "goto был непредвиденным в это время" и привел к завершению работы вашего пакетного файла. Ваш код по-прежнему будет получать эту ошибку, если пользователь вводит пустую строку, даже после устранения проблемы с неправильным именем переменной. Чтобы правильно обрабатывать пустые переменные в операторе IF, поместите квадратные скобки или кавычки вокруг каждой стороны ==
следующим образом:
if [%answer%]==[1] goto nothing
Таким образом, даже если переменная является пустой строкой, IF оценивается как if []==[1] goto nothing
, что по-прежнему является допустимым оператором и, таким образом, не приведет к сбою вашего скрипта.
person
Ryan Bemrose
schedule
08.05.2016
::
— это ярлык. Команда комментарияREM
для примечания. Начните делать вещи правильно, а не неправильно. - person   schedule 08.05.2016::
идиоматически является комментарием в пакетных файлах, функционирует как таковой почти во всех случаях и, возможно, гораздо более читаем. См. stackoverflow.com/questions/16632524. Педантичность, основанная на чистоте языка, несколько абсурдна на таком анахроничном языке, как партия. Люди приходят в пакет, чтобы что-то сделать, а не писать красивый код. - person Ryan Bemrose   schedule 08.05.2016help
- даже ss64 является неофициальной). Видите ли, я тоже могу переложить бремя доказательства, хотя это не делает его менее ложным аргументом. Я дал вам ссылку на одно из лучших доступных объяснений. Если вы понимаете предостережения, изложенные в этом вопросе, вы знаете достаточно, чтобы использовать любой вариант. - person Ryan Bemrose   schedule 08.05.2016rem
работает, а::
нет, и, как и в случае с любым другим языком, перед их использованием следует знать о подводных камнях. Но::
десятилетиями был хорошо понятым и общепринятым способом добавления комментария в пакетный файл. Хотя вы можете рассматривать использование::
в некоторых случаях как выстрел себе в ногу, вряд ли это смертельная рана на языке, который позволяет вам так много способов метафорически оторвать себе ногу. - person Ryan Bemrose   schedule 08.05.2016