4

我试图从另一个批处理文件中调用一个批处理文件,在第二个批处理文件执行后,控件应该返回到第一个批处理文件并且它应该恢复执行。目前我在我的父批处理文件中使用以下命令:

call "cmd /c start /b %ROOT_HOME%\folder1\bin\bat1.bat"

只要 %ROOT_HOME% 的路径中没有空格,它就可以正常工作。

如果路径中包含空格,上述命令将失败。

我已经尝试了cmdstartcall的每种组合,但仍然无法达到预期的结果。

bat1.bat 里面也没有出口,也不能修改。所以单独使用call只会执行子批处理文件,不会返回父批处理文件。

4

3 回答 3

4

您根本不需要call那里,因为无论如何您都在通过以下方式生成新批次cmd

start "" /b "%ROOT_HOME%\folder1\bin\bat1.bat"

尽管我想知道为什么要使用start /b,除非您担心环境污染(可以通过在调用周围使用setlocal/轻松恢复),但也应该足够:endlocalcall

call "%ROOT_HOME%\folder1\bin\bat1.bat"

作为一般规则:围绕某事物进行更多层的解析和执行只会使事情变得更加复杂,并且很少会使问题消失。参照。iex在 PowerShell 中过度使用。

于 2012-11-29T11:50:33.840 回答
2

如果您尝试使用短路径怎么办:

for /f %%P in (%ROOT_HOME%) do set SHORT_ROOT_HOME=%%~sP
call "cmd /c start /b  %SHORT_ROOT_HOME%\folder1\bin\bat1.bat"
于 2012-11-29T11:22:43.497 回答
1

它应该像这样简单

call cmd /c start /b "" "%ROOT_HOME%\folder1\bin\bat1.bat"
于 2012-11-29T10:32:32.790 回答