Batch file 退出/B 0不工作
我有以下问题: 我创建了一个批处理脚本,它在其中调用自身(以便能够并行地编写日志)。在脚本中,我启动了另一个进程(如Batch file 退出/B 0不工作,batch-file,cmd,Batch File,Cmd,我有以下问题: 我创建了一个批处理脚本,它在其中调用自身(以便能够并行地编写日志)。在脚本中,我启动了另一个进程(如start startServer.bat),它启动了一个java进程并一直保持打开状态 在我的原始脚本中,我等待30秒,检查进程是否正在运行,并执行以下操作: exit /B 0 不幸的是,这不起作用,窗口显示正在评估退出/B 0,但窗口仍保持打开状态。当我用另一个进程关闭窗口时(意味着在my.bat中启动的“子”进程),我的脚本将继续运行 因此: scriptA.bat -&
start startServer.bat
),它启动了一个java进程并一直保持打开状态
在我的原始脚本中,我等待30秒,检查进程是否正在运行,并执行以下操作:
exit /B 0
不幸的是,这不起作用,窗口显示正在评估退出/B 0,但窗口仍保持打开状态。当我用另一个进程关闭窗口时(意味着在my.bat中启动的“子”进程),我的脚本将继续运行
因此:
scriptA.bat
-> in there I call: start startServer.bat
-> wait 30 seconds
-> check is server is started
-> exit /B 0
Process hangs up!
-> 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!
非常奇怪的是,如果我用另一个脚本,比如:
scriptB.bat
-> in there I call: start startServer.bat
-> wait 30 seconds
-> check is server is started
-> exit /B 0
Process hangs up!
-> 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!
我也尝试了同样的退出0(无/B),同样的结果!在第一种情况下它会挂断,在第二种情况下我的窗口会按预期关闭
你们中有谁曾经有过这样的问题,并且知道这里出了什么问题吗?
进程挂断 关于退出批处理脚本的所有选项,这里有一个很好的解释: 具体而言,从该页: DOS联机帮助(帮助退出)没有明确说明/B参数是否退出当前脚本实例,这不一定与退出当前脚本相同。 即,如果脚本位于被调用的代码段中,则退出/B将退出调用,而不是脚本
因此,在这种情况下,您肯定不希望
退出/b0
。如果退出0不起作用,请尝试转到EOF 我想您的问题在于start
命令。以下摘录可能会指向这个问题:
命令/程序
如果是内部cmd命令或
批处理文件,然后是命令处理器
使用/K开关运行到cmd.exe。
这意味着窗口将保持不变
在命令运行之后
如果不是内部cmd命令
或批处理文件,则它是一个程序和
将以窗口模式运行
应用程序或控制台应用程序
作为解决方案,您可以尝试修改start命令,如下所示:
start "" cmd /c "startServer.bat"
这封信很好。这里还有一些未记录(或至少不清楚)的行为
在您的问题中,您的情况有些复杂,但假设您正在从原始批处理文件调用/启动批处理文件,在被调用的批处理文件中使用exit/b0
,并希望可以在原始批处理文件中访问ERRORLEVEL
起初的
子批处理文件
要使其工作,必须将start
命令与某些选项一起使用。根据选项的不同,它们可能需要按特定顺序排列(!)
根据位于的文档,您应该能够使用/b
和/wait
开关。文档中没有说明这些开关的顺序很重要,但确实如此
例如,这将不起作用(命令运行顺序错误,并且不会返回ERRORLEVEL):
但是这个确实像预期的那样工作:
start "" /b /wait cmd /c "startServer.bat"
唯一的区别是交换/b
和/wait
开关
我是通过以下步骤偶然发现的:
- 检查了
和start
和call
cmd
- 我的头撞在墙上好几个小时,想尽一切办法
- 放弃了,24小时后回来
我没有尝试任何新的东西,我只是重新开始,第一次就成功了。与以前的文件版本相比,我发现了这个(显然)微小的差异。事实证明,世上根本就没有所谓的 但对于后藤:如果我不能给出错误等级,对吗SI尝试使用goto:EOF,但没有区别:D:>goto:EOF然后进程将挂起,直到我关闭其他进程窗口为止;(不,那不太好用……正如我说的,它的工作原理如下:call scriptA.bat>log.txt------>在那里我调用:start startServer.bat在我使用之前:call scriptA.bat | tee log.txt------>在那里我调用:start startServer.bat和tee命令它不起作用,whyeverso…@murxx:谢谢你的反馈。通常你应该这样做尽可能多地发布关于您的问题的详细信息。否则,很难“猜测”问题可能在哪里。最好的是,您总是展示产生问题的代码。此外,您应该开始接受问题的有用答案的习惯。
start "" /b /wait cmd /c "startServer.bat"