我需要运行用空格,不包括引号
start cmd.exe /k "C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate & cd d:\home\name\addon\ & cfx run"
的问题是,第一条路径中有空格(Program Files
)。我不能使用引号,因为它们已经用于完整命令。
我如何使用空格在此命令?
我需要运行用空格,不包括引号
start cmd.exe /k "C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate & cd d:\home\name\addon\ & cfx run"
的问题是,第一条路径中有空格(Program Files
)。我不能使用引号,因为它们已经用于完整命令。
我如何使用空格在此命令?
谁说当/ 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"
我甚至没有测试过这个,我认为它100%会把所有东西搞砸 – Qiao
您可以用旧的DOS的写作风格,其中每路区段具有最大8个字符喜欢尝试:
C:\Progra~1\Mozill~1\
的〜1是从字母顺序:
C:\DisIsMyDirAlpha
C:\DisIsMyDirBeta
C:\DisIsMyDirGamma
是这些:第一个路径
C:\DisIsM~1
C:\DisIsM~2
C:\DisIsM~3
如果在禁用了8.3短名称的NTFS卷上,这将不起作用。有一个更简单的解决方案,始终有效:请参阅[我的答案](http://stackoverflow.com/a/14184116/1012053) – dbenham
使用引号和逃避他们^
:
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
的行为不同,当您使用&
(这是我从来没有想过听说过)。
这不起作用。尝试一下!如果你删除插入符号,就像我在[我的回答](http://stackoverflow.com/a/14184116/1012053)中所做的那样,那么它工作正常。 – dbenham
@dbenham:也许它只对我有效,因为我使用了一个稍微不同的示例命令。我在我的答案中添加了一些信息! –
你的情况是有效的,因为你已经绕过命令选项的引号。在XCOPY读取选项时删除插入符号。没有这些咒语,它的工作也是如此。如果您在名称中使用空格来执行可执行文件的引号转义,则不起作用。解析器会在第一个空格处断开exe的名称,并且会失败。我会批准你,批量引用和转义可能会变得复杂,但是这个答案是在错误的树上咆哮。 – dbenham
start cmd.exe /k "" "C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate & cd d:\home\name\addon\ & cfx run"
文件路径前加入这两个额外的引号。这通常适用于我。 祝你好运:)
对我来说这看起来相当不方便,所以我尝试了它,但它不起作用。我甚至不确定这些额外引号是用来完成的,但它就像进入C:\ Program Files文件(x86)\ Mozilla Firefox \ sdk \ bin \ activate&cd d:\ home \ name \ addon \ &cfx run'出现提示符,这当然不起作用。我在Windows 7上遇到的错误是'文件名,目录名称或卷标语法不正确.'无论如何,@ dbenham的答案是正确的。 –
单身&做什么? – Bill
它是cmd命令的分隔符。 – Qiao
如果你不能分别引用每一个?例如启动cmd.exe/k“命令1”和“命令2”,那么也许你应该把这些命令放在一个单独的.bat文件中,然后运行它。 – Bill