2

У меня возникли некоторые проблемы с написанным ниже пакетным скриптом, который называется « Options.bat », поэтому я хотел написать о своих проблемах и посмотреть, сможет ли кто-нибудь предложить мне какую-либо помощь.

Мой сценарий дизайна

Сценарий предназначен для быстрого доступа к четырем часто используемым опциям:

  1. Создание папки с именем « test » на диске C
  2. Открытие Internet Explorer
  3. Открытие папки с именем « test » на диске 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

3 ответа3

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 передаст управление оператору после указанной метки вместе с указанными параметрами. Чтобы выйти из подпрограммы, укажите 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 должно решить для вас 1-ю и 2-ю задачи, например:

: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 (чтобы уточнить, какая опция была выбрана) и время ожидания в секундах (что задерживает возврат в MENU - в противном случае возврат происходит мгновенно). Ни то, ни другое строго не нужно.

Обратите внимание, что > NUL после timeout позволяет отображать обратный отсчет (который обычно генерирует timeout ).

Если я вызываю этот сценарий из другого пакетного файла, могу ли я использовать повторяющуюся опцию, упомянутую в (1), из другого сценария?

Я считаю, что простой ответ - "Нет" (по крайней мере, не так, как я полагаю, вы намерены это сделать). Однако повторная отправка входных данных в пакетное окно возможна через сторонние приложения.

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