Windows Shell Script no ECHO, когда выполнено условие «ЕСЛИ НЕ% ответ% ==» - PullRequest
0 голосов
/ 03 июня 2018

Я работаю с тем же сценарием оболочки, что и * 1001. * В настоящее время сценарий оболочки Windows «был неожиданным» в командной строке .Решение здесь работало для Джерри (запрашивающего) и помогало мне, пока я не проверил условие IF NOT.Вот код, о котором идет речь:

SET /p reply="Knock knock!  C:>"

CLS

IF NOT %reply% == "Who is there?" (
    ECHO "Sorry, but you are not playing the game right!"
    GOTO :EOF)

В примере Джерри Blorgbeard предложил решение, которое %reply% должно быть заключено в кавычки, чтобы можно было проверить:

IF NOT "Who is there?" == "Who is there?"

Вместо:

IF NOT Who is there? == "Who is there?"

В результате чего и Джерри, и я получили ошибку: is was unexpected at this time.

После использования решения Blorgbeard ошибка исчезла, но когда я попытался ввести Who is there? вместо "Who is there?" для проверки правильности код пропускает проверку ECHO "Sorry, but you are not playing the game right!"

Чего мне не хватает?Любой совет?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018
IF NOT "%reply%" == "Who is there?" (

отлично сработал для меня с вашим исходным кодом.

Альтернативный метод для включения других действительных ответов может быть:

for %%a in ("Who is there" 
            "Who is it"
            "Whos there" 
            "Who's there") do (
 if /i "%%~a"=="%reply%" goto valid
 if /i "%%~a"=="%reply%?" goto valid
)
ECHO "Sorry, but you are not playing the game right!"
GOTO :EOF
:valid

Обратите внимание, что список элементов, которые являютсяЗначение valid может быть разделено между строками, как показано, но каждый элемент должен быть заключен в кавычки, поскольку он содержит пробелы.

Размещение скобок является критическим.

Элемент "%%~a" означает, что он принимает значение %%a, удаляет все заключенные в кавычки, а затем повторно применяет кавычки.Таким образом, ответ типа Qui также может быть принят и указан в списке, но, поскольку он не содержит пробелов, элемент Qui может быть , необязательно в кавычках.

0 голосов
/ 04 июня 2018

Согласно подсказке Compo просто проверить, содержит ли ответ слова who и there без учета регистра:

SET /p reply="Knock knock!  C:>"
CLS
If not defined reply goto :wrong
echo %reply%|find /i "who" 2>&1>Nul && echo %reply%|find /i "there" 2>&1>Nul && Echo goto :right
:wrong
ECHO "Sorry, but you are not playing the game right!"
GOTO :EOF
:right
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...