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

1845   8  

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

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

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

Comments

    Ничего не найдено.