我正在尝试从另一个批处理文件调用批处理文件,并且在第二个批处理文件执行后,控件应该返回到第一个批处理文件,它应该继续执行。 目前我在我的父批处理文件中使用以下命令:
call "cmd /c start /b %ROOT_HOME%\folder1\bin\bat1.bat"
只要%ROOT_HOME%的路径中没有空格,就可以正常工作。
如果路径中包含空格,则上述命令失败。
我已尝试 cmd ,开始,致电的所有组合,但仍无法达到预期效果。
bat1.bat内部没有退出,也无法修改。 因此,仅使用调用仅执行子批处理文件,而不会返回父批处理文件。
答案 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"