1

Я хочу, чтобы "ввод" был недействительным и чтобы подтвердить приемлемые ответы.

echo.                     Do you want to root your Nexus 5?
echo.                 -----------------------------------------
echo.
echo.
echo. Y. Red  Pill......
echo. ----------------------------------------
echo.
echo      or
echo.
echo. N. Blue Pill......
echo. ----------------------------------------
echo.
set /p root="  Red Pill or Blue Pill?:  "

    if %root%==Y (root\run.bat)
    if %root%==N (exit)
    if %root%==y (root\run.bat)
    if %root%==n (exit)

Это Windows, 32 бит.

2 ответа2

1

Вы можете использовать Labels и Gotos для создания подпрограмм.

Попробуйте что-то вроде этого:

echo.                     Do you want to root your Nexus 5?
echo.                 -----------------------------------------
echo.
echo.
echo. Y. Red  Pill......
echo. ----------------------------------------
echo.
echo      or
echo.
echo. N. Blue Pill......
echo. ----------------------------------------
echo.
:prompt
set /p root="  Red Pill or Blue Pill?:  "

if "%root%"=="Y" goto runBat
if "%root%"=="N" goto exit
if "%root%"=="y" goto runBat
if "%root%"=="n" goto exit
if "%root%"=="" goto prompt

:runBat    
root\run.bat
goto exit

:exit

Если вы хотите сделать что-либо кроме Y или N (и y или n) недействительным (вместо просто Enter), просто удалите часть if "%root%"=="" , оставив в этой строке только goto prompt .

0

Вот как можно создать такое меню в скрипте с помощью TCC/LE от JP Software:

@echo off
:: pill.btm
text
                     Do you want to root your Nexus 5?
                 -----------------------------------------


 Y. Red  Pill......
 ----------------------------------------

     or

 N. Blue Pill......
 ----------------------------------------
endtext
inkey /k"YNRB" `  `Red Pill or Blue Pill?:`  ` %%root
switch "%root%"
case "Y" .OR. "R"
    call root\run
case "N" .OR. "B"
    exit
endswitch

Параметр /k для inkey ограничивает то, какие нажатия клавиш являются даже допустимыми, устраняя необходимость повторения и печати дополнительных подсказок, если задан неправильный выбор. Команда switch выполняет сравнение без учета регистра, а также поддерживает .OR. ,

Конечно, TCC (и его предшественники) всегда облегчали представление гораздо лучших пользовательских интерфейсов из командных сценариев. Вот улучшенная версия вышеупомянутого:

@echo off
:: pill.btm
cls white on blue
drawbox 1 10 6 70 2 green on black fill zoom shadow
drawhline 3 12 57 1 green on black
scrput 2 24 white on black Do you want to root your Nexus 5?
scrput 4 34 red on black Y. Red  Pill
scrput 5 34 blue on black N. Blue Pill
drawbox 10 39 12 41 2 green on black fill shadow
screen 11 40
inkey /k"YNRB" %%root
switch "%root%"
case "Y" .OR. "R"
    cls white on black
    scrput 4 34 red on black Y. Red  Pill
    screen 11 0
    call root\run
case "N" .OR. "B"
    cls white on black
    scrput 5 34 blue on black N. Blue Pill
    screen 11 0
    exit
endswitch

Это всего на 1 строку длиннее, но имеет немало улучшений, не последним из которых является отображение выбранной "таблетки" в цвете.

Однако нет причин, по которым командный сценарий в Windows должен иметь текстовый интерфейс пользователя. TCC также может сделать графическую версию, которая является всего лишь 3-мя строками:

@echo off
msgbox /2 /q continueabort "Red pill, blue pill" About to root your Nexus 5
if %_? == 15 call root\run

Обратите внимание на использование call , кстати. Это ошибка в techie007 . ☺

И это было более 25 лет. Нам не нужно использовать расширение command .bat . Microsoft cmd использует .cmd начиная с OS/2 версии 1. Вы заметите, что я использовал выше .btm TCC/LE - привычка, накапливаемая при написании скриптов .btm которые будут работать с 4NT, 4DOS и 4OS2.

дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .