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

Это то, что у меня есть до сих пор

@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?

8 ответов


если вход, скажем,N, ваши строки IF оцениваются следующим образом:

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

то есть, вы сравниваете N С "y", потом "n" etc. в том числе "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 в режиме разработки, он заставит ее работать как в режиме разработки, так и в режиме без разработки. Поэтому, возможно, вам нужно добавить что-то вроде этого в свой скрипт:

...
: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, чтобы вернуться к началу вашего скрипта, где отображается приглашение и запрашивается ввод, или вы могли бы и добавить еще одну команду Эхо перед прыжком, объясняя, что ввод был неправильным, что-то вроде этого:

@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 в их ответе, который я полностью признаю.


просто я :

set /p input= yes or no
if %input%==yes echo you clicked yes
if %input%==no echo you clicked no
pause
echo that was random
pause
echo bye
pause

вот пример:

@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

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. Все сбой при использовании кавычек.


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

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

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

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

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


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


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

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

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

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