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

A. *_*son 7 windows batch-file command-line-arguments

这个命令有效

START /b /wait "Dummy title" "C:\tmp\test runner2.bat" arg1 arg2
Run Code Online (Sandbox Code Playgroud)

但这两个都失败了!

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"
Run Code Online (Sandbox Code Playgroud)

错误是:

'C:\tmp\test' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

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

相关问题:

jeb*_*jeb 15

这是START命令的已知错误.
如果在命令和参数中都有空格,并尝试使用引号处理它们,则会失败.

首先,START命令检查是否存在完整命令.
但那时它只从第一部分开始.

在你的情况下,它寻找"C:\tmp\test runner2.bat"但尝试开始C:\tmp\test.

当命令被替换为a时,可以避免使用它 CALL

START /b /wait "Dummy title" CALL "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4
Run Code Online (Sandbox Code Playgroud)

用于启动新进程的START用途cmd /k.
这就是造成不良行为的原因.
Paul Groke提到了这样一个事实,即只有当它是一个批处理文件时才会出现.
Exe文件将直接执行,因此它们不受cmd.exe错误的影响.

在你的情况下

C:\Windows\system32\cmd.exe  /K "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4
Run Code Online (Sandbox Code Playgroud)

并帮助cmd /kcmd /c解释,在这种情况下,第一个和最后一个引用被删除.

  • 这似乎仅在使用“ start”执行批处理文件时发生。如果使用启动来启动.exe,则不会发生此问题。 (2认同)

Wil*_* K. 6

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

START "C:\Program Files\MyAppPath\MyApp.exe" arg1 arg2 ... argN
Run Code Online (Sandbox Code Playgroud)

用引号键入的路径应该是START命令的"Title"参数.要摆脱这种情况,你必须"伪造"一个像这样的窗口标题:

START "" "C:\Program Files\MyAppPath\MyApp.exe" arg1 arg2 ... argN
Run Code Online (Sandbox Code Playgroud)

这有助于我的情况.

  • 这也帮助了我:D (2认同)