Команда CALL используется для вызова из пакетного файла другого пакетного файла с возможностью передачи ему входных параметров.

1. Описание команды CALL.

Формат командной строки CALL:

C:\ CALL [диск:][путь]имя_файла [параметры]

параметры – набор параметров командной строки, необходимых пакетному файлу.

При включенном режиме расширенной обработки команд, CALL допускает использование меток в качестве адресата вызова. Применяется следующий синтаксис:

CALL :метка аргументы

При вызове создается новый контекст текущего пакетного файла с заданными аргументами, и управление передается на инструкцию, расположенную сразу после метки.

2. Примеры использования.

2.1. Вызвать командный файл C:\SCRIPTS\test.bat:

C:\ CALL C:\SCRIPTS\test.bat

2.2. Вызвать командный файл C:\SCRIPTS\test.bat и передать ему параметры param1 и param2:

C:\ CALL C:\SCRIPTS\test.bat param1 param2

2.3. Вызвать процедуру, внутри текущего пакетного файла, по метке M1 и передать ей параметр param1:

C:\ CALL :M1 param1

2.4. Для иллюстрации примеров использования команды CALL можно воспользоваться пакетным файлом, например под именем 1.bat следующего содержания:

CALL 2.bat IP 192.168.1.1
ECHO NEWSET = %NEWSET%

Файл 1.bat будет вызывать файл 2.bat и передавать ему 2 параметра – строки IP и 192.168.1.1. И вызываемый файл, например, выполнит создание новой переменной с именем NEWSET вида “IP = 192.168.1.1” Для этого в файле 2.bat используется команда SET:

SET NEWSET=%1 = %2

После выполнения файла 2.bat будет выполнен возврат в файл 1.bat и команда ECHO выведет на экран значение переменной NEWSET, сформированное вызываемым командным файлом.

При использовании вызова процедуры по метке в командном файле, есть некоторые особенности. Для примера, создадим командный файл, в котором имеется вызываемая подпрограмма, которая должна вычислить сумму двух чисел, передаваемых ей в качестве параметров, и присвоить результат переменной Rezult:

REM вызов подпрограммы для суммирования чисел 100 и 2
call :M1 100 2
REM Вывод результата
echo Результат = %Rezult%
pause
exit

:M1
SET /A Rezult=%1+%2
exit /b

В примере используется команда exit с параметром /b внутри вызываемой процедуры. Если данный ключ не указать, то вместо выхода из вызываемой процедуры будет выполнен выход из командного файла (завершение CMD.EXE)