Windows批处理文件:管道破坏我的返回代码

mur*_*rxx 10 cmd batch-file

如果我将脚本的输出传递给日志文件,是否可以返回errorlevel:

test1.bat:

 call test2.bat 2>&1 | tee log.txt
 echo ERRORLEVEL: %ERRORLEVEL%
Run Code Online (Sandbox Code Playgroud)

test2.bat:

 exit /B 1
Run Code Online (Sandbox Code Playgroud)

调用test1.bat时的输出:

 ERRORLEVEL: 0
Run Code Online (Sandbox Code Playgroud)

errorlevel始终为0.

问题是,我想在我的脚本中调用另一个脚本,其中输出应该与命令行中显示的输出同步重定向,因此一个简单的>对我来说是不够的.我尝试了几个想法,但结果是管道似乎总是破坏给定的错误级别...... :(

你能给我任何进一步的建议吗?

提前致谢... :)


谢谢你的答案......不幸的是,这不起作用...... :(看看我尝试过:

test1.bat:

 echo off
 set VAR1=" "
 echo VAR1 before test2: %VAR1%
 call test2.bat 2>&1 | tee log.txt
 echo VAR1 after test2: %VAR1%
Run Code Online (Sandbox Code Playgroud)

测试2:

 @echo off
 set VAR1=ERROR
 echo VAR1 in test2: %VAR1%
 exit /B 1
Run Code Online (Sandbox Code Playgroud)

调用test1.bat时的输出:

 VAR1 before test2: " "
 VAR1 in test2: ERROR
 VAR1 after test2: " "
Run Code Online (Sandbox Code Playgroud)

作为另一种解决方案,我试图将"ERRORVALUE:1"保存到日志文件中,以防出现错误.在主题中,我想解析日志,寻找这个字符串.不幸的是,将查找结果保存到环境变量也不行,我做了如下:

FOR /F "tokens=1 delims=" %%A in ('type %logDir%\03_applySqls.log | find /c "ERRORVALUE: 1"') do SET val=%%A
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Run Code Online (Sandbox Code Playgroud)

那么我怎么能至少解析我的日志文件,如果在日志中找到字符串,我可以将值作为错误级别返回?

Joe*_*oey 1

好吧,问题是在批处理文件之后tee退出,因此它自己的退出代码会覆盖批处理文件之一。

(据我所知)除了使用另一种错误处理机制之外,您对此无能为力。您可以使用环境变量来存储批处理的退出代码。tee不会碰那个。