Если мы игнорируем тот факт, что необходим ввод был y.или нет.(из-за. в сравнении if) никто не заметил фактической проблемы со скриптом c14kaa (кроме Ника ДеВора, но не сказал почему).В исходном сценарии была строка
set / p verifyDeploy = Подтверждение развертывания кода [y / n]?:
Ник упомянул, что это не помещает ответ в переменную.Это потому, что он помещал ответ в «verifyDeploy» (пробел является частью имени переменной, просто еще одна слабость разбора ввода cmd).Таким образом, когда c14kaa использовал% verifyDeploy%, он расширился бы до% verifyDeploy% (т.е. был взят буквально), если бы эта переменная не была установлена в другом месте.Я могу только предположить, что c14kaa отключил эхо, потому что тот факт, что verifyDeploy не заменял (или содержал что-то кроме y или n), был бы большой подсказкой.Это также выявило бы проблему с.в операторе if.
Что касается других предложений, наличие "" вокруг переменной (и, следовательно, необходимость в соответствующей строке) предпочтительнее для остановки синтаксических ошибок, когда переменная пуста (генерирует инструкцию 'if == y ', что означает jeb под "неудачей"),: перед именем метки в goto игнорируется и должен быть пробел после / I в версии Джона (хотя команда if имеет только одну опцию, некоторыекоманд много, и их можно собрать вместе, например, в «findstr / ivn ...», чтобы пробел отмечал конец списка).
Единственный другой комментарий, который я хотел бы сделать, заключается в том, что c14kaa предполагает, что пользователь всегда будет вводить правильный ответ (y или n), потому что в противном случае скрипт «провалится» в раздел: deployCode (возможно, не идеальный).поведение по умолчанию).Это объясняет ответ, полученный Мэттом на предложение (неверный эхо-ввод).Поскольку ответ был помещен в verifyDeploy , это означало, что оба теста (с использованием verifyDeploy без пробела) не пройдены.
Принятие всего вышеперечисленного оставляет нас с версией Рени (с некоторыми добавленными пояснениями).