Использование пакетных файлов, часть 4: Заявление CALL
Если вы еще не догадались, командные файлы могут служить рудиментарным типом языка программирования. Одна вещь, которую предоставляют современные языки программирования, — это возможность разбивать код на небольшие части, так что, если вы измените одну часть, вы не рискуете случайно изменить какой-то несвязанный код. Вы можете разбить большой пакетный файл на модули, разбив его на более мелкие и используя оператор CALL для вызова отдельных модулей по мере необходимости.
Давайте возьмем случай наличия системы меню, которая позволяет пользователю вызывать любую из множества функций. Что мы сделаем, так это поместим каждую из функций в отдельный командный файл и будем использовать оператор CALL в командном файле главного меню, чтобы вызвать выбранную функцию, которая затем вернется в меню, чтобы пользователь мог выбрать другую функцию.
Вот как может выглядеть Menu.bat:
@ECHO OFF :TOP CLS ECHO Welcome to the Main Menu! Here are your choices... ECHO. ECHO A) Perform Function A B) Perform Function B ECHO C) Perform Function C D) Perform Function D ECHO. ECHO Q) Quit ECHO. CHOICE /C ABCDQ GOTO %ERRORLEVEL% :5 GOTO :EOF :4 CALL FuncD.bat GOTO TOP :3 CALL FuncC.bat GOTO TOP :2 CALL FuncB.bat GOTO TOP :1 CALL FuncA.bat GOTO TOP
А вот как может выглядеть FuncA.bat:
ECHO This is Function A PAUSE
Несмотря на то, что здесь ничего интересного не происходит, это начало достойного фреймворка для системы меню на основе команд. И следует отметить несколько моментов. Работая сверху вниз, первая новая команда, с которой мы столкнулись, — это команда CLS. Эта простая команда просто очищает экран, так что наше меню всегда будет выглядеть хорошо само по себе. Проницательный глаз также заметит некоторые утверждения ECHO, сразу за которыми следует точка. Вот как вы выводите пустую строку. Еще одна новинка — встроенная метка EOF. Это избавляет от необходимости объявлять собственную метку, которая существует в последней строке файла (например, моя метка «: Готово», используемая в других советах).
Это приводит нас к операторам CALL. Параметр, указанный с помощью CALL, — это имя командного файла, который должен быть вызван следующим. Так, например, если пользователь выбрал вариант A из меню, командный файл немедленно перейдет к метке: 1, что приведет к следующему вызову FuncA.bat. Мой файл FuncA.bat просто ЭХО для строки и ПАУЗА. Оператор PAUSE вызывает вывод строки, в которой говорится: «Нажмите любую клавишу, чтобы продолжить …». Затем он приостанавливает выполнение командного файла до тех пор, пока пользователь не нажмет клавишу. После нажатия клавиши пакетный файл продолжается, что в данном случае означает, что FuncA.bat завершает работу и управление возобновляется обратно в командном файле главного меню в строке, следующей сразу за вызовом FuncA.bat. Следующим шагом будет GOTO TOP, с которого все начнется заново.
Обратите внимание, что вам не нужно помещать еще один «@ECHO OFF» в начало FuncA.bat, потому что состояние ECHO сохраняется при вызове FuncA.bat.
Этот совет (13187) применим к Windows 7, 8 и 10.