Script em lote de repetição

2

Estou tendo alguns problemas com o script em lote abaixo que escrevi e que tem o nome " Options.bat ", então queria escrever sobre meus desafios e ver se alguém poderia me oferecer alguma ajuda.

Meu design de script

O script foi criado para oferecer acesso rápido a quatro opções que eu uso com frequência:

  1. Criando uma pasta chamada " teste " na unidade C
  2. Abrindo o Internet Explorer
  3. Abrindo uma pasta chamada " teste " na unidade C
  4. Abrindo a tela Dispositivos e impressoras

Meus problemas de script

  1. Repetindo - Eu quero ser capaz de escolher uma opção e fazer com que o script retorne ao início para que outra opção possa ser escolhida e assim por diante até que o usuário realmente feche a tela de comando . Atualmente, apenas uma ação pode ser executada e, em seguida, a tela de comando é fechada após a pausa

  2. Não use opções que não são escolhidas - No momento, se a opção 4 for selecionada, somente sua lógica será executada. No entanto, se a opção 1 for selecionada, ela executará toda a lógica de rotina da opção em ordem seqüencial.

  3. Eu preciso chamar esse script de outro script, por isso preciso ter certeza de que tudo isso funciona chamando-o por meio de outro script é possível ou importante.

Meu script em lote

Options.bat

::Provides 4 action options
@ECHO OFF
C:
CD\
CLS

:MENU
CLS

ECHO ============= MENU NAME =============
ECHO -------------------------------------
ECHO 1.  Create "test" folder C drive
ECHO 2.  Open Internet Explorer
ECHO 3.  Open "test" folder
ECHO 4.  Open Devices and printers
ECHO ==========PRESS 'Q' TO QUIT==========
ECHO.

SET INPUT=
SET /P INPUT=Please select a number:

IF /I '%INPUT%'=='1' GOTO Selection1
IF /I '%INPUT%'=='2' GOTO Selection2
IF /I '%INPUT%'=='3' GOTO Selection3
IF /I '%INPUT%'=='4' GOTO Selection4
IF /I '%INPUT%'=='Q' GOTO Quit

CLS

ECHO ============INVALID INPUT============
ECHO -------------------------------------
ECHO Please select a number from the Main
echo Menu [1-4] or select 'Q' to quit.
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======

PAUSE > NUL
GOTO MENU

:Selection1

md c:\test

:Selection2

start iexplore

:Selection3

start c:\test

:Selection4

control printers

:Quit
PAUSE
    
por SteveM 19.04.2018 / 07:07

3 respostas

1

Eu modifiquei sua lógica abaixo para executar a maneira como eu a escreveria, da maneira como você explica que deseja que funcione.

Essentially this will. . .

  • Use the CALL command to call the specified subroutine rather than GOTO since it will pass control back to the subroutine that made the call originally as long as it end with GOTO :EOF.

  • Use the GOTO :EOF at the end of each called subroutine to pass control back to the original caller subroutine so it can continue to process the rest its logic

Script

::Provides 4 action options
@ECHO OFF
C:
CD\
CLS

:MENU
CLS

ECHO ============= MENU NAME =============
ECHO -------------------------------------
ECHO 1.  Create "test" folder C drive
ECHO 2.  Open Internet Explorer
ECHO 3.  Open "test" folder
ECHO 4.  Open Devices and printers
ECHO ==========PRESS 'Q' TO QUIT==========
ECHO.

SET INPUT=
SET /P INPUT=Please select a number:

IF /I '%INPUT%'=='1' CALL :Selection1
IF /I '%INPUT%'=='2' CALL :Selection2
IF /I '%INPUT%'=='3' CALL :Selection3
IF /I '%INPUT%'=='4' CALL :Selection4
IF /I '%INPUT%'=='Q' CALL :Quit

CLS

ECHO ============INVALID INPUT============
ECHO -------------------------------------
ECHO Please select a number from the Main
echo Menu [1-4] or select 'Q' to quit.
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======

PAUSE > NUL
GOTO :MENU

:Selection1
md c:\test
GOTO :EOF

:Selection2
start iexplore
GOTO :EOF

:Selection3
start c:\test
GOTO :EOF

:Selection4
control printers
GOTO :EOF

:Quit
PAUSE

Mais recursos

  • Ligue

    • CALL a subroutine (:label)

      The CALL command will pass control to the statement after the label specified along with any specified parameters. To exit the subroutine specify GOTO :eof this will transfer control to the end of the current subroutine.

por 19.04.2018 / 17:22
0

então:

:Selection1

md c:\test

GOTO Quit

Você tem que pular para o final depois. Caso contrário, apenas continuará com Selection2 .

Mas se você quiser reiniciar o script para reiniciar até que o usuário selecione 'Q', basta fazer um GOTO que retornará à seleção.

Para executá-lo a partir de outro lote, como "batchfile.bat 4", que executará o Selection4, adicionei a função

::Provides 4 action options
@ECHO OFF
C:
CD\
CLS

::Will skip menu if argument passed.

IF /I %1=='1' GOTO Selection1
IF /I %1=='2' GOTO Selection2
IF /I %1=='3' GOTO Selection3
IF /I %1=='4' GOTO Selection4  

:MENU
CLS

ECHO ============= MENU NAME =============
ECHO -------------------------------------
ECHO 1.  Create "test" folder C drive
ECHO 2.  Open Internet Explorer
ECHO 3.  Open "test" folder
ECHO 4.  Open Devices and printers
ECHO ==========PRESS 'Q' TO QUIT==========
ECHO.

SET INPUT=
SET /P INPUT=Please select a number:

IF /I '%INPUT%'=='1' GOTO Selection1
IF /I '%INPUT%'=='2' GOTO Selection2
IF /I '%INPUT%'=='3' GOTO Selection3
IF /I '%INPUT%'=='4' GOTO Selection4
IF /I '%INPUT%'=='Q' GOTO Quit

CLS

ECHO ============INVALID INPUT============
ECHO -------------------------------------
ECHO Please select a number from the Main
echo Menu [1-4] or select 'Q' to quit.
ECHO -------------------------------------
ECHO ======PRESS ANY KEY TO CONTINUE======

PAUSE > NUL
GOTO MENU

:Selection1

md c:\test
GOTO MENU

:Selection2

start iexplore
GOTO MENU

:Selection3

start c:\test
GOTO MENU    

:Selection4

control printers
GOTO MENU

:Quit
PAUSE
    
por 19.04.2018 / 08:56
0

Adicionar GOTO MENU no final de cada Selection deve resolver o primeiro e segundo problemas para você, por exemplo:

:Selection1

ECHO Option: "test" folder on C drive...
md c:\test
timeout /t 3 /nobreak > NUL
GOTO MENU

:Selection2

ECHO Option: Open Internet Explorer...
start iexplore
timeout /t 3 /nobreak > NUL
GOTO MENU

:Selection3

ECHO Option: Open "test" folder...
start c:\test
timeout /t 3 /nobreak > NUL
GOTO MENU

:Selection4

ECHO Option: Open Devices and printers...
control printers
timeout /t 3 /nobreak > NUL
GOTO MENU

:Quit
PAUSE

No código acima, também adicionei uma instrução ECHO (para esclarecer qual opção foi selecionada) e um tempo limite em segundos (o que retarda o retorno ao MENU - caso contrário, o retorno é instantâneo). Nenhum destes é estritamente necessário.

Observe que > NUL após timeout impede a exibição de uma contagem regressiva (que é o que normalmente produz timeout ).

If I call this script from another batch file, can I still use the repeating option mentioned at (1) from within the other script?

Eu acredito que a resposta simples é "Não" (pelo menos não como eu acredito que você pretende isso). Repetidamente, o envio de entrada para a janela de lote pode ser possível através de aplicativos de terceiros, no entanto.

    
por 19.04.2018 / 09:00