Для этого следует использовать рекурсивный вызов командного файла с передачей нескольких параметров, как показано далее:
@echo off
if (%1)==(Recurse) goto Recurse
goto Begin
:Begin
echo Batch file begins.
call %0 Recurse test
goto End
:Recurse
echo This is a recursive call.
echo The parameters received were "%1" and "%2"
goto CleanEnd
:End
echo Finished
:Clean-End
При использовании этого метода необходимо соблюдать осторожность, поскольку рекурсивный командный файл может стать причиной проблем при запуске подпрограммой другого программы. В следующем примере демонстрируется еще один способ:
:Begin
echo start subroutine
call :Subroutine
echo finished subroutine
goto End
:Subroutine
echo In subroutine
goto :EOF
:End
Еще один способ, предназначенный для файлов .CMD в Windows, рассматривается в следующем примере. Обратите внимание на синтаксис вызова подпрограмм (с использованием параметров), а также на применение специальной команды для возврата из подпрограммы (goto :eof).
@echo off
call :Begin
echo Finished.
goto :eof
:Begin
echo Batch file begins
call :recurse Recurse test
goto :eof
:Recurse
echo This is a recursive call.
echo The parameters received were "%1" è "%2"
goto :eof