在bat脚本中使用空格,不带引号

时间:2013-01-06 15:11:16

标签: batch-file

我需要运行

start cmd.exe /k "C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate & cd d:\home\name\addon\ & cfx run"

问题是第一个路径有空格(Program Files)。我不能使用引号,因为它们已用于完整命令。

如何在此命令中使用空格?

5 个答案:

答案 0 :(得分:16)

谁说在引用/ C命令时你不能在exe路径周围添加引号?它工作正常! : - )

start cmd.exe /k ""C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate" & cd d:\home\name\addon\ & cfx run"

执行前删除/ C命令周围的外引号,只留下exe路径周围的引号。您可以在帮助中阅读有关CMD流程报价的方式。只需在命令提示符下键入CMD /?HELP CMD即可。它确实令人困惑。

If /C or /K is specified, then the remainder of the command line after
the switch is processed as a command line, where the following logic is
used to process quote (") characters:

    1.  If all of the following conditions are met, then quote characters
        on the command line are preserved:

        - no /S switch
        - exactly two quote characters
        - no special characters between the two quote characters,
          where special is one of: &<>()@^|
        - there are one or more whitespace characters between the
          two quote characters
        - the string between the two quote characters is the name
          of an executable file.

    2.  Otherwise, old behavior is to see if the first character is
        a quote character and if so, strip the leading character and
        remove the last quote character on the command line, preserving
        any text after the last quote character.

您的命令有两个以上的引号,因此遵循选项2.

如果您的exe名称包含&之类的特殊字符,例如this&that.exe,则上述操作无效的唯一时间。这会导致问题,因为最初解析START命令时不会引用exe名称。这可以通过转义文件名中的问题字符来解决。

start cmd.exe /k ""this^&that.exe" & echo something else"

答案 1 :(得分:4)

您可以尝试旧的DOS写作风格,其中每个路径段都有最多8个字符,如:

C:\Progra~1\Mozill~1\

〜1来自字母顺序:

C:\DisIsMyDirAlpha
C:\DisIsMyDirBeta
C:\DisIsMyDirGamma

是这些:

C:\DisIsM~1
C:\DisIsM~2
C:\DisIsM~3

答案 2 :(得分:0)

使用第一条路径的引号并使用^转义它们:

start cmd.exe /k "^"C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate^" & cd d:\home\name\addon\ & cfx run"

修改

关于@dbenham的评论:
有趣。使用^进行转义确实对我有用,虽然我的实际命令略有不同,因为我用我想到的第一个命令测试了它。

这适用于我的机器(Windows XP SP 3):

start cmd.exe /k "xcopy ^"C:\Program Files\Windows Live\Messenger\license.rtf^" c:\"

我还阅读了关于使用双引号""进行转义的内容,但对于我的上述示例,这对我不起作用。
再说一遍,我不是批处理文件的大师,当你使用cmd.exe时,&可能会有不同的行为(我之前从未听说过)。

答案 3 :(得分:0)

start cmd.exe /k "" "C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate & cd d:\home\name\addon\ & cfx run"

在文件路径之前添加这两个额外的引号。这通常对我有用。 祝你好运:)

答案 4 :(得分:0)

这可用于Win 7 Home:start cmd.exe /c "C:\RemoveDrive\RemoveDrive G:"

我无法使Win 7 Pro在路径中或可执行文件的一部分(“ RemoveDrive:G”)中运行带有空格的.bat文件。所以我让RunEjectG.bat来运行EjectG.bat。

这是一种解决方法,但是我不能花更多的时间来解决问题。 注意:运行蝙蝠后,/c开关会关闭cmd窗口,/k开关会使cmd窗口保持打开状态。