Повторюється пакетний сценарій


2

У мене виникли проблеми з нижченаведеним сценарієм, який написав Options.bat "Тому я хотів написати про свої виклики і подивитися, чи може хто-небудь запропонувати мені будь-яку допомогу."

Дизайн мого сценарію

Сценарій призначений для швидкого доступу до чотирьох опцій, які я часто використовую:

  1. Створення папки під назвою " тест "на диску C
  2. Відкриття Internet Explorer
  3. Відкриття папки з назвою " тест "на диску C
  4. Відкриття Пристрої та принтери екрані

Проблеми з моїм сценарієм

  1. Повтор - Я хочу мати можливість вибрати опцію, а потім повернути скрипт для початку, щоб можна було вибрати іншу опцію і так далі, поки користувач не закриє екран команди. В даний час може бути зроблено лише одну дію, після чого екран команди закривається після паузи

  2. Не використовуйте опції, які не вибрано - На даний момент, якщо опція 4 обрана, то тільки її логіка працює. Однак, якщо обрано параметр 1, він виконує послідовну послідовність логіки всіх параметрів опції.

  3. Мені потрібно викликати цей скрипт з іншого сценарію, тому мені потрібно бути впевненим, що всі ці дії можуть викликати його через інший сценарій або питання.


Мій пакетний сценарій

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

Відповіді:


1

Я змінив вашу логіку нижче, щоб запустити так, як я б написав її так, як ви поясните, що ви хочете, щоб вона працювала.

По суті це буде. . .

  • Використовувати CALL команда для виклику зазначеної підпрограми, а не GOTO оскільки він пройде контроль   назад до підпрограми, яка зробила виклик спочатку, поки вона закінчується   с GOTO :EOF.

  • Використовувати GOTO :EOF в кінці кожної викликаної підпрограми передати контроль назад до початкової підпрограми абонента, щоб він міг продовжити обробку решти   його логіка


Сценарій

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

Подальші ресурси

  • Телефонуйте

    • CALL підпрограма (: label)

      The CALL Команда передасть управління оператору після позначки   вказано поряд з будь-якими заданими параметрами. Для виходу з підпрограми   вказати GOTO :eof це передасть управління до кінця струму   підпрограма .


0

тому:

:Selection1

md c:\test

GOTO Quit

Після цього потрібно перейти до кінця. Якщо ні, то вона просто продовжуватиметься Selection2.

Але якщо ви хочете перезапустити скрипт для перезапуску, доки користувач не вибере 'Q', просто зробіть GOTO, який повернеться до вибору.

Для того, щоб запустити його з іншого пакета, наприклад "batchfile.bat 4", який запускатиме Selection4, я додав функцію

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

0

Додавання GOTO MENU в кінці кожного Selection Вам слід вирішити першу та другу проблеми, наприклад:

: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

У коді вище, я також додав ECHO заяву (щоб уточнити, який варіант вибрано) і a час вийшов в секундах (що затримує повернення до MENU - інакше повернення відбувається миттєво). Жоден з них не є абсолютно необхідним.

Зверніть увагу, що > NUL після timeout запобігає відлік (що і є timeout зазвичай виводить).

Якщо я називаю цей скрипт з іншого пакетного файлу, чи можу я все ще використовувати повторюваний параметр, згаданий у (1), з іншого сценарію?

Я вважаю, що проста відповідь "Ні" (принаймні не те, як я вважаю, що ви маєте намір). Проте повторне надсилання даних до вікна пакетів можливо через програми третіх сторін.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.