7

此命令有效

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.

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

相关问题:

4

3 回答 3

17

这是 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用途。 这就是不当行为的原因。 Paul Groke 提到了这样一个事实,即这只发生在批处理文件中。文件将被直接执行,因此它们不受 cmd.exe 错误的影响。cmd /k


Exe

在你的情况下

C:\Windows\system32\cmd.exe  /K "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4

并解释说cmd /kcmd /c在这种情况下,第一个和最后一个引号被删除。

于 2013-07-16T16:27:48.097 回答
8

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

START "C:\Program Files\MyAppPath\MyApp.exe" arg1 arg2 ... argN

用引号键入的路径应该是 START 命令的“标题”参数。要摆脱这种情况,您必须“伪造”这样的窗口标题:

START "" "C:\Program Files\MyAppPath\MyApp.exe" arg1 arg2 ... argN

这对我有帮助。

于 2014-10-15T11:11:31.483 回答
3

这不能回答我的问题,但它确实解决了我遇到的直接问题。

在阅读“ Windows 命令外壳中文件名周围的引号问题”-post 时,我发现了一种解决方法:

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
于 2013-07-16T11:35:31.243 回答