windows - 将错误代码从子 cmd 提示符批量返回到其父 cmd 提示符
问题描述
我有一个父 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
子 scipt: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
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!
将错误级别存储到子特定退出代码文件的第一行。ECHO(%~nx0
将文件名和扩展名存储到第二行。ECHO(n
将行号存储到第三行。您需要将此数字调整为代码中使用此调试工具的命令所在的行。
推荐阅读
- reactjs - 下一个 Js 项目 getServerSideProps
- amazon-web-services - grafana 中的 dynamodb aws 指标有问题
- c# - 计算两个方向之间的差异
- angular - Rxweb - 如何将数据绑定到具有 @propArray 装饰器的 formGroup
- flatbuffers - 为什么需要编译flatc可执行文件?
- swift - UIViewRepresentable UITextField 在连接到 ObservableObject 的 @Published 属性时会跳过第一个字符
- macos - 这个包不兼容
- flutter - Flutter 中的 AnimatedBuilder
- android - 我正在使用 SmartyAd SDK 并收到错误项目未构建
- matlab - AWGN、Rayleigh 和 Rician 频道上的 BPSK、QPSK Mod