Чтобы использовать запуск, вам нужно изменить все подпрограммы для создания файла кода выхода при ошибке.
СМОТРИТЕ ЗДЕСЬ, КАК УДЕРЖАТЬ ПРОГРАММУ РОДИТЕЛЯ ДО ВСЕХ ЗАВЕРШЕННЫХ ПОДПИСЕЙ
@Echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:controller
Call :launcher "a.bat" "b.bat" "c.bat"
pause
EXIT
:launcher
Set count=0
For %%a in (%*) Do (
Set /a count+=1
Set "Prog[!count!]=%%~a"
Start "+++batch+++" "%%~a"
)
:loop
timeout /t 1 >nul
tasklist /fi "windowtitle eq +++batch+++*" |find "cmd.exe" >nul && goto :loop
REM :: Note- This method exits subs on encountering First Error.
For /L %%B IN (1,1,!count!) DO (
FOR %%N IN (!Prog[%%B]!) DO (
IF EXIST "%%~nN_exitcode.txt" (
<"%%~nN_exitcode.txt" (
Set /p exitcode=
Set /p E_P=
Set /p L_N=
)
DEL /Q "%%~nN_exitcode.txt"
IF DEFINED exitcode (
ECHO Errorlevel !exitcode! returned in !E_P! at Line !L_N!
)
) else (
ECHO Sub %%~nN completed succesfully
)
)
)
GOTO :EOF
Примеры дочерней программы:
a.bat
@ECHO OFF
Setlocal EnableDelayedExpansion
CALL Hello|| (ECHO(!errorlevel!&ECHO(%~nx0&ECHO(3)>%~n0_exitcode.txt && EXIT
ECHO HELLO|| (ECHO(!errorlevel!&ECHO(%~nx0&ECHO(4)>%~n0_exitcode.txt && EXIT
exit
b.bat:
@ECHO OFF
Setlocal EnableDelayedExpansion
ECHO Hello|| (ECHO(!errorlevel!&ECHO(%~nx0&ECHO(3)>%~n0_exitcode.txt && EXIT
CALL HELLO|| (ECHO(!errorlevel!&ECHO(%~nx0&ECHO(4)>%~n0_exitcode.txt && EXIT
exit
c .bat
@ECHO OFF
Setlocal EnableDelayedExpansion
ECHO Hello|| (ECHO(!errorlevel!&ECHO(%~nx0&ECHO(3)>%~n0_exitcode.txt && EXIT
ECHO HELLO|| (ECHO(!errorlevel!&ECHO(%~nx0&ECHO(4)>%~n0_exitcode.txt && EXIT
exit
|| (ECHO(!errorlevel!&ECHO(%~nx0&ECHO(4)>%~n0_exitcode.txt && EXIT
создает файл только в случае сбоя предыдущей команды.
ECHO(!errorlevel!
Сохраняет уровень ошибки в первой строке дополнительного файла c Exitcode file. ECHO(%~nx0
Сохраняет имя файла и расширение для второй строки. ECHO(n
Сохраняет номер строки в третьей строке. Вам нужно будет настроить этот номер в соответствии со строкой в вашем коде, команда Использование этого инструмента отладки расположена в.