Как запросить и получить пользовательский ввод в 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