【问题标题】:Why does windows START command not work with spaces in arguments AND path?为什么 Windows START 命令不适用于参数和路径中的空格?
【发布时间】:2013-07-14 11:58:28
【问题描述】:

此命令有效

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.

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

相关问题:

【问题讨论】:

  • 不启动也行吗? "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4
  • 使用call,而不是start,从其他批处理脚本运行批处理脚本。
  • @AnsgarWiechers 我只是想弄清楚该命令是否按原样工作。如果它不能按原样工作,很可能它不适用于 start 或 call 或其他任何东西。
  • @devnull 它适用于call。
  • 如果命令不是批处理脚本(而是 .exe 文件)怎么办?那么CALL 就不行了,对吧?我尚未对其进行测试,但我认为即使是这种情况,原始问题仍然存在?

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


【解决方案1】:

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

在阅读“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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我试了大约一个小时......但是对于一个错误我当然无能为力:)
    • 这似乎只有在使用start 执行批处理文件时才会发生。如果用 start 来启动.exe,这个问题不会发生。
    • 4 年后,这仍然是一个错误...但是非常感谢您提供非常有用的答案:)
    【解决方案3】:

    “Jeb”已经指出了正确的方向。就我而言,我没有尝试运行批处理,而是“程序文件”文件夹中的程序(启动程序后批处理将终止)。调用时

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

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

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

    这对我有帮助。

    【讨论】:

    • 抱歉 - 我发现问题属于 PATH 和 ARGUMENTS 中的空格...
    • 这对我也有帮助:D
    • 看在上帝的份上...我为此浪费了一些时间。它应该是“开始”然后我想开始。
    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    相关资源
    最近更新 更多