Como você faz “inserir” uma opção inválida no script em lote?

1

Eu quero que "enter" seja inválido e reafirme as respostas aceitáveis.

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)

Este é o Windows, 32 bits.

    
por rombreaker 26.02.2014 / 21:42

2 respostas

1

Você pode usar Labels e Gotos para criar sub-rotinas.

Tente algo assim:

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

Se você quiser tornar algo diferente de Y ou N (e y ou n) inválido (em vez de apenas Enter), basta remover a parte if "%root%"=="" , deixando apenas goto prompt nessa linha.

    
por 26.02.2014 / 21:52
0

Veja como alguém faz esse menu em um script com TCC / LE da 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

A opção /k para inkey restringe quais pressionamentos de tecla são aceitáveis, eliminando a necessidade de repetição de loop e imprimindo prompts extras se uma seleção inválida for fornecida. O comando switch faz uma comparação sem distinção entre maiúsculas e minúsculas e também suporta .OR. .

É claro que o TCC (e seus predecessores) sempre facilitaram a apresentação de interfaces de usuário muito melhores a partir de scripts de comando. Aqui está uma versão melhorada do acima mencionado:

@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

É apenas 1 linha mais longa, mas tem algumas melhorias, e a última delas é a exibição da "pílula" escolhida, em cores.

No entanto, não há motivo para que um script de comando no Windows tenha uma interface de usuário textual. O TCC também pode fazer uma versão gráfica, que é apenas um 3 liner:

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

Observe o uso de call , a propósito. Este é um bug no script de techie007 . ☺

E já se passaram 25 anos. Não precisamos usar a extensão command do .bat . cmd da Microsoft usou .cmd desde a versão 1 do OS / 2. Você notará que eu usei .btm do TCC / LE acima - um hábito acumulado ao escrever .btm scripts que funcionariam com 4NT, 4DOS e 4OS2 .

Leitura adicional

por 01.03.2014 / 22:01

Tags