[英]Return Errorcode from child cmd prompt to its parent cmd prompt in batch
我有一个父 scipt:test.bat
@Echo off
SETLOCAL ENABLEDELAYEDEXPANSION
start cmd /c a.bat ^& echo %errorLevel% ^> exitcode.txt
if exist exitcode.txt (
echo ERROR in a.bat file
)
ECHO Reached the EOF
子脚本:a.bat
echo off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%A IN (1,1,1000) DO (
echo value in loop %%A
)
exit /b 0
我想在 a.bat 完成后检查 test.bat 中的错误级别。 注意:a.bat 可以多次从 test.bat 调用。 所有 a.bat 将并行运行。 而Test.bat 会等到所有a.bat 文件执行完毕。 现在,test.bat 在 a.bat 完成之前就完成了。 任何人都可以帮忙吗?
要使用 start,您需要修改所有子程序以在出错时创建退出代码文件。
@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
儿童计划示例:
一只蝙蝠
@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.蝙蝠:
@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
蝙蝠
@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!&ECHO(%~nx0&ECHO(4)>%~n0_exitcode.txt && EXIT
仅在前面的命令失败时创建文件。
ECHO(!errorlevel!
将错误级别存储到子特定退出代码文件的第一行。ECHO(%~nx0
将文件名和扩展名存储到第二行。ECHO(n
将行号存储到第三行。您需要将此行号调整为代码中的行,命令 Using this Debugging tool 位于。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.