如何在Windows批处理编程中获取管道中命令的错误级别?

29 windows batch-file batch-processing

批处理文件默认返回最后一个命令的错误代码.

是否有可能返回前一个命令的错误代码.最值得注意的是,是否可以在管道中返回命令的错误代码?

例如,这个单行批处理脚本

foo.exe
Run Code Online (Sandbox Code Playgroud)

返回foo的错误代码.但是这一个:

foo.exe | tee output.txt
Run Code Online (Sandbox Code Playgroud)

始终返回tee的退出代码,该代码为零.

Nic*_*ier 9

我有一个类似的问题,并解决了以下解决方案,因为我不需要检测确切的错误代码只是成功或失败.

echo > .failed.tmp    

( foo.exe && del .failed.tmp ) | tee foo.log

if exist .failed.tmp (
    del .failed.tmp
    exit /b 1
) else (
    exit /b 0
)
Run Code Online (Sandbox Code Playgroud)


小智 3

一种解决方法是通过文件进行间接寻址。

像这样

foo.exe > tmp.txt
set FOOERR=%ERRORLEVEL%
cat tmp.txt
exit %FOOERR%
Run Code Online (Sandbox Code Playgroud)

  • 这违背了使用 tee 的全部目的,即立即获取控制台输出并记录到文件中。 (18认同)