如何从其他批处理文件调用其路径中包含空格的批处理文件,并将控制权返回给父批处理文件

时间:2012-11-29 09:41:05

标签: cmd batch-file

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

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

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

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

我已尝试 cmd 开始致电的所有组合,但仍无法达到预期效果。

bat1.bat内部没有退出,也无法修改。 因此,仅使用调用仅执行子批处理文件,而不会返回父批处理文件。

3 个答案:

答案 0 :(得分:3)

您根本不需要call,因为您无论如何都会通过cmd生成新批次:

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

虽然我想知道你为什么要使用start /b,除非你担心环境污染(可以通过呼叫使用setlocal / endlocal轻松恢复),所以{ {1}}也应该足够了:

call

作为一般规则:围绕某些事物进行更多层次的解析和执行会使事情变得更加复杂,并且很少会使问题消失。参看在PowerShell中过度使用call "%ROOT_HOME%\folder1\bin\bat1.bat"

答案 1 :(得分:1)

它应该像这个一样简单

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

答案 2 :(得分:1)

如果你尝试使用短路径怎么样:

for /f %%P in (%ROOT_HOME%) do set SHORT_ROOT_HOME=%%~sP
call "cmd /c start /b  %SHORT_ROOT_HOME%\folder1\bin\bat1.bat"