17

我需要跑步

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

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

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

4

5 回答 5

17

谁说当 /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 个引号,因此遵循选项 2。

如果您的 exe 名称包含特殊字符&,例如this&that.exe. 这会导致问题,因为最初解析 START 命令时未引用 exe 名称。这可以通过转义文件名中的问题字符来解决。

start cmd.exe /k ""this^&that.exe" & echo something else"
于 2013-01-06T16:25:28.240 回答
4

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

C:\Progra~1\Mozill~1\

~1 是按字母顺序排列的:

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

这些是:

C:\DisIsM~1
C:\DisIsM~2
C:\DisIsM~3
于 2013-01-06T15:17:33.263 回答
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在您使用时可能表现不同&(我以前从未听说过)。

于 2013-01-06T15:31:58.660 回答
0
start cmd.exe /k "" "C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate & cd d:\home\name\addon\ & cfx run"

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

于 2014-04-15T17:22:55.617 回答
0

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

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

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

于 2018-07-04T16:47:00.423 回答