此命令有效
START /b /wait "Dummy title" "C:\tmp\test runner2.bat" arg1 arg2
但这两个都失败了!
START /b /wait "Dummy title" "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4
START /b /wait "Dummy title" "C:\tmp\test runner2.bat" arg1 arg2 "arg 3"
错误是:
'C:\tmp\test' is not recognized as an internal or external command, operable program or batch file.
显然它与"
有关,但我为什么以及如何解决这个问题?
相关问题:
答案 0 :(得分:14)
这是START命令的已知错误 如果在命令和参数中都有空格,并尝试使用引号处理它们,则会失败。
首先START命令检查是否存在完整命令 但那时它只从第一部分开始。
在您的情况下,它会查找"C:\tmp\test runner2.bat"
,但请尝试启动C:\tmp\test
。
当命令被CALL
START /b /wait "Dummy title" CALL "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4
START
使用cmd /k
启动新流程
这就是造成不良行为的原因
Paul Groke提到了这样一个事实,即只有当它是批处理文件时才会出现这种情况
Exe
文件将直接执行,因此不受cmd.exe错误的影响。
在你的情况下
C:\Windows\system32\cmd.exe /K "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4
cmd /k
和cmd /c
的帮助解释说,在这种情况下,第一个和最后一个引号会被删除。
答案 1 :(得分:5)
START "C:\Program Files\MyAppPath\MyApp.exe" arg1 arg2 ... argN
用引号键入的路径应该是START命令的“Title”参数。要摆脱这种情况,你必须“伪造”一个像这样的窗口标题:
START "" "C:\Program Files\MyAppPath\MyApp.exe" arg1 arg2 ... argN
这对我的情况有帮助。
答案 2 :(得分:3)
这不能回答我的问题,但它确实解决了我遇到的直接问题。
在阅读“Problem with quotes around file names in Windows command shell”帖子时,我发现了一种解决方法:
cmd.exe /C ""C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4"
还可以通过简单地使用call
命令执行命令来实现其他解决方法(如Ansgar Wiechers所述)
call "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4