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

是否有可能返回错误级别也,如果我管一个脚本到日志文件的输出:

test1.bat:

call test2.bat 2>&1 | tee log.txt echo ERRORLEVEL: %ERRORLEVEL%

test2.bat:

exit /B 1

调用test1.bat时输出:

ERRORLEVEL: 0

该错误级别始终为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%

测试2:

@echo off set VAR1=ERROR echo VAR1 in test2: %VAR1% exit /B 1

调用test1.bat时输出:

VAR1 before test2: " " VAR1 in test2: ERROR VAR1 after test2: " "

作为另一个解决方案,我试图挽救“ERRORVALUE:1”到日志文件的情况下,有一个错误。 在mainscript我想分析日志查找该字符串。 不幸的是节省了查找,结果到环境变量不工作,以及,我根本如下:

FOR /F "tokens=1 delims=" %%A in ('type %logDir%3_applySqls.log | find /c "ERRORVALUE: 1"') do SET val=%%A

错误我得到:

"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.

所以,我怎么能至少解析我的日志文件,并在情况下,该字符串的日志我可以返回值作为错误级别中发现的?

--------------解决方案-------------

那么,问题是, tee您的批处理文件退出,因此其自身的退出代码覆盖批处理文件之一。

有(据我所知)没有什么可以做这件事,除了用另一个错误处理机制。 您可以使用环境变量来存储批次的退出代码。 tee是不会碰的。

怎么样:

FOR /F "tokens=1 delims=" %%A in ('find /c "ERRORVALUE: 1" %logDir%3_applySqls.log') do SET val=%%A

讨厌。 我只能建议松鼠客场传递命令的退出代码的包装批处理文件。 环境变量不会在这儿住用喽。 我建议写它为一个未使用的FD,说4。

wr.cmd:

call %*
echo %errorlevel% >&4
echo Some error message >&2

这是有点难为FD 4时候一定要打开wr.cmd被调用。 为了测试的缘故,在这里我赞同Some error message到stderr表明,这样的文本仍然独立于错误级别。

test1.bat:

call wr test2.bat 4>fail.txt 2>&1 | tee log.txt
set /p fail= <fail.txt
echo FAIL: %fail%

分类:批处理文件 时间:2015-03-15 人气:0
本文关键词: CMD,批处理文件
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.154 (s). 10 q(s)