Powtarzający się skrypt wsadowy

2

Mam problemy z poniższym skryptem wsadowym, który napisałem o nazwie „ Opcje.bat „więc chciałem napisać o moich wyzwaniach i sprawdzić, czy ktoś mógłby mi zaoferować pomoc.

Mój projekt skryptu

Skrypt został zaprojektowany w celu zapewnienia szybkiego dostępu do czterech często używanych opcji:

  1. Tworzenie folderu o nazwie „ test „na dysku C
  2. Otwarcie Internet Explorer
  3. Otwieranie folderu o nazwie „ test „na dysku C
  4. Otwarcie Urządzenia i drukarki ekran

Moje problemy ze skryptami

  1. Powtórzenie - Chcę mieć możliwość wyboru opcji, a następnie powrotu skryptu do uruchomienia, aby można było wybrać inną opcję itd., Aż użytkownik faktycznie zamknie ekran poleceń. Obecnie można wykonać tylko jedną akcję, a ekran poleceń zamyka się po pauzie

  2. Nie używaj opcji, które nie są wybrane - W tej chwili, jeśli wybrana jest opcja 4, to działa tylko jej logika. Jeśli jednak wybrana jest opcja 1, to uruchamia ona całą logikę rutynową opcji w kolejności sekwencyjnej.

  3. Muszę wywołać ten skrypt z innego skryptu, więc muszę mieć pewność, że wszystkie prace wywołujące go za pośrednictwem innego skryptu są możliwe lub ważne.


Mój skrypt wsadowy

Opcje.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
SteveM
źródło

Odpowiedzi:

1

Zmodyfikowałem twoją logikę poniżej, aby działać tak, jak bym to napisał, zgodnie ze sposobem, w jaki wyjaśniłeś, że ma to działać.

Zasadniczo to będzie. . .

  • Użyj CALL polecenie wywołania określonego podprogramu zamiast GOTO ponieważ przejdzie kontrolę   powrót do podprogramu, który pierwotnie zakończył połączenie   z GOTO :EOF.

  • Użyj GOTO :EOF na końcu każdego wywoływanego podprogramu, aby przekazać kontrolę z powrotem do pierwotnego podprogramu wywołującego, aby mógł kontynuować przetwarzanie pozostałych   jego logika


Scenariusz

::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

Dalsze zasoby

  • Połączenie

    • ZADZWOŃ podprogram (: etykieta)

      The CALL polecenie przekaże kontrolę do instrukcji po etykiecie   określone wraz z określonymi parametrami. Aby wyjść z podprogramu   sprecyzować GOTO :eof spowoduje to przeniesienie sterowania na koniec prądu   podprogram .

Pimp Juice IT
źródło
0

więc:

:Selection1

md c:\test

GOTO Quit

Następnie musisz przejść do końca. Jeśli nie, będzie po prostu kontynuować Selection2.

Ale jeśli chcesz zrestartować skrypt, aby uruchomić go ponownie, dopóki użytkownik nie wybierze „Q”, po prostu utwórz GOTO, które wróci do wyboru.

Aby uruchomić go z innej partii, takiej jak „batchfile.bat 4”, która uruchomi Selection4, dodałem funkcję

::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
davidbaumann
źródło
0

Dodawanie GOTO MENU na końcu każdego Selection powinien rozwiązać pierwszy i drugi problem, np .:

: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

W powyższym kodzie dodałem także ECHO oświadczenie (w celu wyjaśnienia, która opcja została wybrana) i a koniec czasu w sekundach (co opóźnia powrót do MENU - w przeciwnym razie powrót jest natychmiastowy). Żadne z nich nie są bezwzględnie konieczne.

Zauważ, że > NUL po timeout zapobiega odliczaniu (co jest czym timeout normalnie produkuje) od wyświetlenia.

Jeśli wywołam ten skrypt z innego pliku wsadowego, czy nadal mogę używać powtarzającej się opcji wymienionej w punkcie (1) w innym skrypcie?

Wierzę, że prostą odpowiedzią jest „Nie” (przynajmniej nie tak, jak sądzę, że zamierzacie). Jednak wielokrotne wysyłanie danych wejściowych do okna wsadowego może być możliwe za pośrednictwem aplikacji innych firm.

Anaksunaman
źródło