2013-01-06 40 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的答案是正確的。 –