Как запросить и получить пользовательский ввод в файле. 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"и т. д. в том числе"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 перед прыжком, объясняя, что ввод был неправильным, что-то вроде этого:@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 из-за этого .расширение летучей мыши.
Также у меня нет способа проверить это, но это похоже на то, что пакетный процессор пропускает строки If из-за некоторых ошибок, а затем выполняет один с-dev.
Вы можете попробовать это, выбрав две цели прыжка (
:yesи:no) вместе с кодом. Если затем выполняется строка без-dev, вы знаете, что ваши строки If ошибочны.Если это так, пожалуйста, проверьте, действительно ли
==правильный способ сделать сравнение в файлах.bat.Также, судя по тому, как bash делает это,
%foo=="y"может быть оценено как true, только если%fooвключает кавычки. Так что, возможно,"%foo"=="y"- это путь.
В зависимости от версии Windows вы можете счесть использование опции "выбор" полезным. Насколько я могу судить, он не поддерживается в большинстве, если не во всех версиях x64. Удобная замена под названием Выбор.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
Comments