Как мне это сделать, если вы ничего не вставили в (IF) и нажали enter, он будет работать правильно? - PullRequest
0 голосов
/ 28 сентября 2019

Я смотрю, что если пользователь ничего не вводит или просто набирает что-то еще, кроме Y или N., чтобы спросить его снова.

Я пытался что-то сделать.Я действительно новичок в партии, поэтому мне нужна помощь.(Ничего) - это ввод или что-то еще, что вы вводите, но это не Y или N

    set /p again=Repeat again? [Y/N]= 
    if /i %again%== (Nothing) goto second
    if /i %again%== N exit
    if /i %again%== Y goto again
    :second
    set /p again=Repeat again? [Y/N]= 
    if /i %again%== (Nothing) goto second
    if /i %again%== N exit
    if /i %again%== Y goto again

На самом деле, если вы просто введете или введете что-то еще, кроме Y или N, спросит еще раз и выйдет.

Ответы [ 2 ]

2 голосов
/ 29 сентября 2019

Проблема в том, что вы используете неверную команду для своей задачи.Когда вы используете Set /P, конечный пользователь может свободно вводить ничего или вообще ничего, (который включает в себя символы яда) .Решение состоит в том, чтобы использовать правильную команду Choice, которая допускает только определенные записи.Чтобы точно узнать, как использовать команду Choice, откройте окно командной строки и введите choice /?.

Вот как я могу это сделать, используя команду Choice.

В:

Choice /C yn /N /M "Attack again [Y/N]="
If ErrorLevel 2 Exit /B
GoTo again
1 голос
/ 29 сентября 2019

Если вы вводите строку с set/p, то нельзя сказать, что введенные данные не содержат Пробелы .Способ преодолеть это - "enclose the strings on both sides of the comparison operator in quotes" - то есть двойные кавычки 'not single quotes'

SET / P "var = Prompt" не изменится var, если ввести в одиночкунажата.Следовательно, если var изначально пусто, оно остается пустым.

if /i "%var%"=="value" выполняет сравнение с пустыми переменными / значениями или теми, которые содержат разделители (например, пробелы). '/ I' делает сравнение нечувствительным к регистру.

IF DEFINED var имеет значение true, если var равно в настоящее время определено (примечание: не %var%.)

Синтаксис SET "var=value" (где значение может бытьпусто; в этом случае var становится undefined ) используется, чтобы гарантировать, что любые заданные пробелы НЕ включены в назначенное значение.

В вашем коде метка again не определено, хотя может быть определена переменная again (в зависимости от ввода пользователя).

Если вы введете какое-либо значение, которое не является ни y, ни n или пусто , тогда ваш код просто перейдет к следующему оператору, так что, например, если вы введете z в первом set/p, то выполнение будет просто проходить через все if тесты допометьте second и выполните вторую команду set /p.

Например:

:: Ensure the variable "again" is not defined
:RETRY1
set "again="
:: Get user-input to "again"
set /p again=Repeat again? [Y/N]= 
:: Test the value entered - ENTER only (first way)
if defined again (echo something was entered) else (echo ENTER only)
:: Test the value (second way - more conventional using /i to make case-insensitive)
if "%again%"=="" goto second
if /i "%again%"=="N" exit
if /i "%again%"=="Y" goto yes
:: We get here if the entry was neither ENTER alone, "Y" or "N"
echo "%again%" is not a valid response.
goto retry1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...