为什么windows START命令不能与参数和路径中的空格一起使用?

时间:2013-07-16 10:33:43

标签: windows batch-file command-line-arguments

此命令有效

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.

显然它与"有关,但我为什么以及如何解决这个问题?

相关问题:

3 个答案:

答案 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 /kcmd /c的帮助解释说,在这种情况下,第一个和最后一个引号会被删除。

答案 1 :(得分:5)

“杰布”已经指出了正确的方向。在我的情况下,我没有尝试运行批处理,而是“Program Files”文件夹中的程序(批处理应在启动程序后终止)。致电时

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