2011-09-05 15 views
48

這可能很容易,但網絡上沒有答案。我想通過批處理將XML線回顯到文件中,但它誤解了重定向的XML關閉標記「>」。該行如下:使用帶特殊字符的批量回顯

echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml 

有沒有什麼辦法給批處理解析器提示不解釋一個特殊的字符串?我使用雙引號,但它也將它們寫入文件中!該文件應該是這樣的迴應後:

<?xml version="1.0" encoding="utf-8" ?> 
+1

的[逃生在Windows命令提示角括號]可能重複(http://stackoverflow.com/questions/251557/escape-angle-brackets-in-a- windows-command-prompt) – Helen

+1

[批量字符轉義]可能的重複(http://stackoverflow.com/questions/6828751/batch-character-escaping) –

回答

67

可以逃脫shell元字符與^

echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml 

注意,因爲echo是一個shell內置它不遵循有關平時公約引用,所以只引用參數將輸出引號而不是刪除它們。

+1

@ Joey ..如果使用多個標籤,在一個大的XML文件中。 –

+3

@ Nevin:你仍然必須逃避每個'<' and '>'。沒有什麼特別的。話雖如此,我建議不要在一行中回顯大型XML文件......這顯然是有原因的。 – Joey

+0

@ Joey..Got你的觀點現在...謝謝 –

14

一個簡單的解決方案是使用延遲擴展,因爲這不會更改任何特殊字符。

set "line=<?xml version="1.0" encoding="utf-8" ?>" 
setlocal EnableDelayedExpansion 
(
    echo !line! 
) > myfile.xml 

編輯:另一種解決方案是使用消失報價

這TECHNIC使用引號引用特殊字符

@echo off 
setlocal EnableDelayedExpansion 
set ""=" 
echo !"!<?xml version="1.0" encoding="utf-8" ?> 

訣竅作品,如特殊字符逐步主導引號中!"!將保留行的其餘部分(如果有AREN別的引號)。
而在延遲擴展階段,!"!將替換爲變量"(單引號是合法名稱!)的內容。

如果您正在使用禁用延遲擴展,則可以使用FOR /F循環代替。

for /f %%^" in ("""") do echo(%%~" <?xml version="1.0" encoding="utf-8" ?>

但作爲似乎有點惱人,你也可以建立一個宏。

set "print=for /f %%^" in ("""") do echo(%%~"" 

%print%<?xml version="1.0" encoding="utf-8" ?> 
%print% Special characters like &|<>^ works now without escaping 
+1

'echo!line!'只要'line'變量中沒有'!'就會工作。對此有何補救? –

+1

不,如果'line'包含'!',那麼它將毫無問題地工作,但是如何將感嘆號標記到變量中並不總是顯而易見的。試試'set「line = Hello ^!」 &echo!line!' – jeb

+0

你是100%正確的。我一定是看了一些東西! –

16

另一種方法:

@echo off 

for /f "useback delims=" %%_ in (%0) do (
    if "%%_"=="___ATAD___" set $= 
    if defined $ echo(%%_ 
    if "%%_"=="___DATA___" set $=1 
) 
pause 
goto :eof 

___DATA___ 
<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <data id="1"> 
     hello world 
    </data> 
</root> 
___ATAD___ 


rem # 
rem # 
10

的方式來輸出>字符是^轉義字符加前綴:

echo ^> 

將打印只需

> 
2

喬伊的回答並不適合我。 執行

echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml 

後,我得到這個錯誤 慶典:附近意外的標記'>」語法錯誤

該解決方案爲我工作:

echo "<?xml version=\"1.0\" encoding=\"utf-8\">" > myfile.txt 

參見http://www.robvanderwoude.com/escapechars.php

+1

請注意,這將保留輸出 –

11

在爲了在Windows上使用特殊字符(例如'>'),需要放置特殊的轉義字符befo重新吧。

例如

echo A->B 

,因爲將無法正常工作 '>' 必須由 '^' 轉義:

echo A-^>B 

又見escape sequencesenter image description here

有一個短的批處理文件,它打印一組基本的特殊字符及其轉義序列。

+1

中的引號但對於引號,脫字符是轉義字符,使用兩個引號是錯誤的,因爲它只增加了第二個引號。 'echo line1「」&echo line2' vs'echo Line1 ^「&echo line2' – jeb

+0

@jeb:謝謝,我更新了截圖和腳本。 – orbitcowboy

0

爲什麼不使用單引號?

echo '<?xml version="1.0" encoding="utf-8" ?>' 

輸出

<?xml version="1.0" encoding="utf-8" ?>