2

Я пытаюсь составить таблицу возможных входных данных для конечного пользователя, но один из входных данных вызывает сбой программы при наличии пробела. Я знаю, что обычно заключать ввод в «» - это правильно, но в этом случае это не работает, вот код:

SET /P ANSWER=%ANSWER%
if /i {%ANSWER%}=={help} (goto :FunctionList)
if /i {%ANSWER%}=={?} (goto :FunctionList)
if /i {%ANSWER%}=={clear} (goto :clear)
if /i {%ANSWER%}=={yes} (goto :yes)
if /i {%ANSWER%}=={tutorial} (goto :tutorial)
if /i {%ANSWER%}=={New User} (goto :NewUser) **--Offending line**

Линия :

if /i {%ANSWER%}=={New User} (goto :NewUser)

отказывается переходить к следующей части, независимо от того, включен ли {New User} "" или нет.

:NewUser
    SET /P USERNAME=Please enter your desired username:
    SET /P PASSWORD=Please enter your desired password:

1 ответ1

1

Я знаю, что, как правило, правильное выполнение ввода с помощью ""

но это не работает в этом случае

if /i {%ANSWER%}=={help} (goto :FunctionList)

Когда %ANSWER% является New User он содержит Space и обрабатывается как две отдельные строки командой if .


Решение

Заключите выражения if в " s:

if /i "%ANSWER%"=="help" (goto :FunctionList)
if /i "%ANSWER%"=="?" (goto :FunctionList)
if /i "%ANSWER%"=="clear" (goto :clear)
if /i "%ANSWER%"=="yes" (goto :yes)
if /i "%ANSWER%"=="tutorial" (goto :tutorial)
if /i "%ANSWER%"=="New User" (goto :NewUser)

Разделители

Если строка, сравниваемая командой IF содержит разделители, такие как Space или Comma , то либо разделители должны быть экранированы с помощью символа ^ либо вся строка должна быть заключена в "кавычки".

Это связано с тем, что оператор IF будет обрабатывать строку как один элемент, а не как несколько отдельных строк.

Source if - Условно выполнить команду.


Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .