如果我将脚本的输出传递给日志文件,是否可以返回errorlevel:
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%
TEST2:
@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”保存到日志文件中,以防出现错误。在主题中,我想解析日志,寻找这个字符串。不幸的是,将查找结果保存到环境变量也不行,我做了如下:
FOR /F "tokens=1 delims=" %%A in ('type %logDir%\03_applySqls.log | find /c "ERRORVALUE: 1"') do SET val=%%A
我得到错误:
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
那么我怎样才能至少解析我的日志文件,如果在日志中找到该字符串,我可以将该值作为错误级别返回?
答案 0 :(得分:2)
讨厌。我只能建议一个包装批处理文件,它松开传递命令的退出代码。环境变量不会完全削减芥末。我建议将它写入未使用的fd,比如4。
<强> wr.cmd 强>:
call %*
echo %errorlevel% >&4
echo Some error message >&2
这有点棘手,因为在调用 wr.cmd 时必须打开fd 4。为了便于测试,我在这里向{stderr}回显Some error message
以显示此类文本与错误级别保持独立。
<强> test1.bat 强>:
call wr test2.bat 4>fail.txt 2>&1 | tee log.txt
set /p fail= <fail.txt
echo FAIL: %fail%
答案 1 :(得分:1)
嗯,问题是tee
在批处理文件之后退出,因此它自己的退出代码会覆盖其中一个批处理文件。
据我所知,除了使用另一种错误处理机制之外,你无法做很多事情。您可以使用环境变量来存储批次的退出代码。 tee
不接触。
答案 2 :(得分:1)
怎么样:
FOR /F "tokens=1 delims=" %%A in ('find /c "ERRORVALUE: 1" %logDir%\03_applySqls.log') do SET val=%%A