2013-01-06 44 views
15

我需要运行用空格,不包括引号

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

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

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

+0

单身&做什么? – Bill

+1

它是cmd命令的分隔符。 – Qiao

+0

如果你不能分别引用每一个?例如启动cmd.exe/k“命令1”和“命令2”,那么也许你应该把这些命令放在一个单独的.bat文件中,然后运行它。 – Bill

回答

15

谁说当/ 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

我甚至没有测试过这个,我认为它100%会把所有东西搞砸 – Qiao

4

您可以用旧的DOS的写作风格,其中每路区段具有最大8个字符喜欢尝试:

C:\Progra~1\Mozill~1\ 

的〜1是从字母顺序:

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

是这些:第一个路径

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

如果在禁用了8.3短名称的NTFS卷上,这将不起作用。有一个更简单的解决方案,始终有效:请参阅[我的答案](http://stackoverflow.com/a/14184116/1012053) – dbenham

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的行为不同,当您使用&(这是我从来没有想过听说过)。

+1

这不起作用。尝试一下!如果你删除插入符号,就像我在[我的回答](http://stackoverflow.com/a/14184116/1012053)中所做的那样,那么它工作正常。 – dbenham

+0

@dbenham:也许它只对我有效,因为我使用了一个稍微不同的示例命令。我在我的答案中添加了一些信息! –

+1

你的情况是有效的,因为你已经绕过命令选项的引号。在XCOPY读取选项时删除插入符号。没有这些咒语,它的工作也是如此。如果您在名称中使用空格来执行可执行文件的引号转义,则不起作用。解析器会在第一个空格处断开exe的名称,并且会失败。我会批准你,批量引用和转义可能会变得复杂,但是这个答案是在错误的树上咆哮。 – dbenham

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

文件路径前加入这两个额外的引号。这通常适用于我。 祝你好运:)

+0

对我来说这看起来相当不方便,所以我尝试了它,但它不起作用。我甚至不确定这些额外引号是用来完成的,但它就像进入C:\ Program Files文件(x86)\ Mozilla Firefox \ sdk \ bin \ activate&cd d:\ home \ name \ addon \ &cfx run'出现提示符,这当然不起作用。我在Windows 7上遇到的错误是'文件名,目录名称或卷标语法不正确.'无论如何,@ dbenham的答案是正确的。 –