小编mur*_*rxx的帖子

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

如果我将脚本的输出传递给日志文件,是否可以返回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 …
Run Code Online (Sandbox Code Playgroud)

cmd batch-file

10
推荐指数
1
解决办法
3228
查看次数

退出/ B 0不起作用

我有以下问题:

我创建了一个批处理脚本,在那里调用自己(因为能够并行写入日志).在脚本中,我启动另一个进程(如start startServer.bat),它启动一个java进程并一直保持打开状态.

在我的原始脚本中,我等待30秒,检查进程是否正在运行并执行以下操作:

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

不幸的是,这不起作用,窗口显示正在评估退出/ B 0,但窗口仍然保持打开状态.当我用另一个进程关闭窗口(意味着在我的.bat中启动"子"进程)时,我的脚本继续运行.

所以:

scriptA.bat

-> in there I call: start startServer.bat
-> wait 30 seconds
-> check is server is started
-> exit /B 0
Process hangs up!
Run Code Online (Sandbox Code Playgroud)

如果我将另一个脚本包裹起来,那是非常奇怪的,例如:

scriptB.bat

-> call scriptA.bat
-----> in there I call: start startServer.bat
-----> wait 30 seconds
-----> check if server is started
-----> exit /B 0
-> scriptA.bat continues without any hangup!
Run Code Online (Sandbox Code Playgroud)

我也尝试了相同的退出0(没有/ B),同样的结果!在第一种情况下,它挂起,在第二种情况下,我的窗口按预期关闭...

你以前有没有人遇到这样的问题,知道这里有什么问题吗?流程挂断了!

cmd batch-file

6
推荐指数
1
解决办法
5万
查看次数

标签 统计

batch-file ×2

cmd ×2