Для этого следует использовать рекурсивный вызов командного файла с передачей нескольких параметров, как показано далее:

@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