Подтвердить что ты не робот

Как я могу запросить и получить ввод пользователя в байте и использовать его для запуска определенной программы?

Это то, что я до сих пор

@echo off
:Ask
echo Would you like to use developer mode?(Y/N)
set INPUT=
set /P INPUT=Type input: %=%
If %INPUT%=="y" goto yes 
If %INPUT%=="n" goto no
If %INPUT%=="Y" goto yes
If %INPUT%=="N" goto no
:yes
java -jar lib/RSBot-4030.jar -dev
echo Starting RSbot in developer mode
:no
java -jar lib/RSBot-4030.jar
echo Starting RSbot in regular mode
pause

В любом случае, если пользователь вводит y или n, он всегда работает в режиме -dev.

Как заставить его работать в режиме -dev, если ответ "да", и обычный режим, если ответ отрицательный. Кроме того, как мне заставить его задавать снова, если вход не Y, N, y или n?

4b9b3361

Ответ 1

Если входной сигнал, например, N, ваши IF-линии оцениваются следующим образом:

If N=="y" goto yes 
If N=="n" goto no
…

То есть вы сравниваете N с "y", затем "n" и т.д., включая "n". Вы никогда не получите совпадение, если пользователь каким-то образом не примет решение ввести "n" или "y" (т.е. Один из четырех символов, но заключен в двойные кавычки).

Таким образом, вам нужно либо удалить " из y, N, y и N, либо разместить их вокруг %INPUT% в ваших условных операторах. Я бы порекомендовал последнее, потому что таким образом вы избегаете по крайней мере некоторых символов, имеющих особое значение в пакетных сценариях (если пользователю удалось ввести их). Итак, это то, что вы должны получить:

If "%INPUT%"=="y" goto yes 
If "%INPUT%"=="n" goto no
If "%INPUT%"=="Y" goto yes
If "%INPUT%"=="N" goto no

Кстати, вы могли бы уменьшить количество условий, применив переключатель /I к оператору IF, например:

If /I "%INPUT%"=="y" goto yes 
If /I "%INPUT%"=="n" goto no

Переключатель /I делает сравнения нечувствительными к регистру и поэтому вам не нужны отдельные проверки для строк в разных случаях.

Еще одна проблема заключается в том, что после выполнения команды режима разработки перескакивает другая команда, и поэтому, если пользователь соглашается запустить Java в режиме разработки, он запустит ее как в разработке режим и режим без разработки. Поэтому, возможно, вам нужно добавить что-то вроде этого к вашему script:

...
:yes
java -jar lib/RSBot-4030.jar -dev
echo Starting RSbot in developer mode
goto cont
:no
java -jar lib/RSBot-4030.jar
echo Starting RSbot in regular mode
:cont
pause

Наконец, чтобы решить проблему обработки некорректного ввода, вы можете просто добавить другую (безусловную) команду goto сразу после условных операторов, перед меткой yes, а именно goto Ask, чтобы вернуться к началу вашего script, где отображается приглашение, и запрашивается вход, или вы могли бы добавить еще одну команду ECHO перед прыжком, объяснив, что вход был неправильным, примерно так:

@echo off
:Ask
echo Would you like to use developer mode?(Y/N)
set INPUT=
set /P INPUT=Type input: %=%
If /I "%INPUT%"=="y" goto yes 
If /I "%INPUT%"=="n" goto no
echo Incorrect input & goto Ask
:yes
...

Примечание. Некоторые из упомянутых здесь проблем также были адресованы @xmjx в их ответе, которые я полностью подтверждаю.

Ответ 2

я просто делаю:

set /p input= yes or no
if %input%==yes echo you clicked yes
if %input%==no echo you clicked no
pause

Ответ 3

Вот рабочий пример:

@echo off
:ask
@echo echo Would you like to use developer mode?(Y/N)
set INPUT=
set /P INPUT=Type input: %=%
If /I "%INPUT%"=="y" goto yes 
If /I "%INPUT%"=="n" goto no
goto ask
:yes
@echo you select yes
goto exit
:no
@echo you select no
goto exit
:exit
@pause

Ответ 4

Я улучшил командный файл с подсказкой да или нет. Если пользователь вводит любой символ, кроме y и n, он снова запрашивает у пользователя допустимый ввод. Меня устраивает.

    @echo off

    :ConfirmBox 
        set /P c= Are you sure want to contine (y/n)?

    if /I "%c%" EQU "Y" (
    goto :FnYes 
    ) else if /I "%c%" EQU "N" ( 
    goto :FnNo
    ) else ( 
    goto :InValid 
    )


:FnYes
     echo You have entered Y
     goto :END

:FnNo
     echo You have entered N
     goto :END

:InValid
     echo Invalid selection. Enter Y or N
     goto :ConfirmBox

:END
    pause
    exit  

/I if if условие будет проверять как строчные, так и прописные буквы.

Ответ 5

Я не знаю, на какой платформе вы это делаете, но я предполагаю Windows из-за расширения .bat.

Также у меня нет возможности проверить это, но похоже, что пакетный процессор пропускает строки If из-за некоторых ошибок, а затем выполняет команду с -dev.

Вы можете попробовать это, перемещая две цели перехода (:yes и :no) вместе с кодом. Если тогда выполняется строка без -dev, вы знаете, что строки If ошибочны.

Если да, проверьте, действительно ли == правильный способ сравнения в файлах .bat.

Кроме того, судя по тому, как bash делает этот материал, %foo=="y" может оценивать true, только если %foo содержит кавычки. Так что, возможно, "%foo"=="y" - это путь.

Ответ 6

echo off
setlocal
SET AREYOUSURE = N
:PROMPT
set /P AREYOUSURE=Update Release Files (Y/N)?
if /I %AREYOUSURE% NEQ Y GOTO END
set /P AREYOUSURE=Are You Sure you want to Update Release Files (Y/N)?
if /I %AREYOUSURE% NEQ Y GOTO END

echo Copying New Files

:END

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

if /I %AREYOUSURE% NEQ "Y" GOTO END

Я тестировал на XP, Vista, Win7 и Win8. Все сбой при использовании кавычек.

Ответ 7

В зависимости от версии Windows вы можете использовать опцию "Выбор", чтобы быть полезной. Насколько мне известно, он не поддерживается в большинстве, если не все версии x64. Удобную подстановку под названием Choice.vbs вместе с примерами использования можно найти на SourceForge под названием Choice.zip

Ответ 8

Добавьте кавычки ("") вокруг% INPUT%, чтобы она выглядела так:

If "%INPUT%" == "y" goto yes
If "%INPUT%" == "n" goto no
If "%INPUT%" == "Y" goto yes
If "%INPUT%" == "N" goto no

Ответ 9

попробуйте это для сравнения

if "%INPUT%"=="y"...