2010-08-02 58 views
3

運行下面的示例批處理文件,如何在續行後正確地轉義引用的命令?

echo foo &&^ 
"C:\Program Files\Internet Explorer\iexplore.exe" 

...產生以下輸出:

foo 
'"C:\Program' is not recognized as an internal or external command, 
operable program or batch file. 

我缺少什麼?

編輯

作爲標記,這個問題是處理與Windows(XP)的批處理文件。

回答

7

對不起,但幾乎所有的答案都是錯誤的,或不明白 怎麼了。

問題與cmd行無關,或者如果它在批處理文件中。

插入多行字符的規則:
插入行末尾,插入下一行並轉義附加行的第一個字符!
這就是原因爲什麼會得到

echo foo^
&& echo bar 
---- OUTPUT --- 
foo & 
bar 
--------------- 

rem equivalent to 
echo foo ^&& echo bar 
rem So the first ampersand is escaped and the second works as a single & 

這也是原因爲什麼原來的代碼不能工作

echo foo &&^ 
"C:\Program Files\Internet Explorer\iexplore.exe" 

rem is equivalent to this, so the quote will be escaped 
echo foo &&^"C:\Program Files\Internet Explorer\iexplore.exe" 

爲什麼其他的解決方案的工作?

echo foo &&^ 
cmd /c "C:\Program Files\Internet Explorer\iexplore.exe" 

rem is equivalent to 
echo foo &&^cmd /c "C:\Program Files\Internet Explorer\iexplore.exe" 

如果你逃避「c」或不是「cmd」不重要。

有一種方法可以在不修改第二行的情況下工作。

echo foo && >con^
"C:\Program Files\Internet Explorer\iexplore.exe" 

這是一個特例的特殊情況下,插入符作爲一部普通的多,但沒有逃脫的第一個字符。 (我想,cmd.exe沒有編程,它出來的混亂)。

+1

謝謝你!我以爲我瘋了。另一個簡單的補救措施是在插入符號後的引用行的開頭添加一個空格。 – 2014-10-15 18:18:33

-1

嘗試刪除&符。

echo foo^
"C:\Program Files\Internet Explorer\iexplore.exe" 

我得到

C:\Users\keith\Desktop>echo foo 
foo 

C:\Users\keith\Desktop>"C:\Program Files\Internet Explorer\iexplore.exe" 

編輯 - 我不想在我的批處理文件的頂部有@echo off

+0

如果刪除&符號,則會更改命令的行爲。 &字符表示第二個命令只應在第一個命令成功時運行。 – bobs 2010-08-02 21:46:54

+0

是的,我試着在第二行放置符號,就像你上面提到的那樣,它最後回顯'foo&' – kmfk 2010-08-02 22:27:06

+0

是的,如果你從cmd行運行它,這是真的。問題表明它應該在批處理文件中。它在批處理文件中的工作方式不同。 – bobs 2010-08-03 00:21:39

-1

如果包含空格,則需要引用路徑;我不太清楚你所面對的是什麼語言,但基本上你需要:

""C:\Program Files\Internet Explorer\iexplore.exe"" 
+0

Windows(XP)批處理文件。新錯誤: '「」C:\ Program'不被識別爲內部或外部命令, 可操作的程序或批處理文件。 – steamer25 2010-08-02 19:44:53

0

嘗試在第二行把& &。

echo foo^
&& "C:\Program files\internet explorer\iexplore.exe" 

編輯:如問題詢問,此命令必須在批處理文件中運行。它從批處理文件起作用,但是在命令行中工作不正確!

+0

這將顯示'foo&',並且如果第一個命令失敗,也會執行第二個命令。 – wimh 2010-08-04 21:24:46

+0

如果您按OP指示將其放入批處理文件中,此命令可正常工作。請嘗試批處理文件中的命令。 – bobs 2010-08-04 23:49:41

1

當引用條件處理符號(即&,&&,||)時,引號似乎被cmd.exe正確解析。

作爲一種變通,你可以使用只含有短名沒有空格字符的路徑:

echo foo &&^ 
C:\Progra~1\Intern~1\iexplore.exe 

或者使用一個輔助變量,變量延遲擴展:

setlocal enabledelayedexpansion 

set "IE_EXE=C:\Program Files\Internet Explorer\iexplore.exe" 

echo foo &&^ 
!IE_EXE! 
+0

第二個解決方案將錯誤的命令行發送給iexplore。它會嘗試打開'http://文件/ Internet%20Explorer/iexplore.exe'' – wimh 2010-08-04 21:33:06

1

這似乎也工作:

echo foo &&^ 
cmd /c "C:\Program Files\Internet Explorer\iexplore.exe" 
相關問題