這可能很容易,但網絡上沒有答案。我想通過批處理將XML線回顯到文件中,但它誤解了重定向的XML關閉標記「>」。該行如下:使用帶特殊字符的批量回顯
echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml
有沒有什麼辦法給批處理解析器提示不解釋一個特殊的字符串?我使用雙引號,但它也將它們寫入文件中!該文件應該是這樣的迴應後:
<?xml version="1.0" encoding="utf-8" ?>
這可能很容易,但網絡上沒有答案。我想通過批處理將XML線回顯到文件中,但它誤解了重定向的XML關閉標記「>」。該行如下:使用帶特殊字符的批量回顯
echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml
有沒有什麼辦法給批處理解析器提示不解釋一個特殊的字符串?我使用雙引號,但它也將它們寫入文件中!該文件應該是這樣的迴應後:
<?xml version="1.0" encoding="utf-8" ?>
可以逃脫shell元字符與^
:
echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
注意,因爲echo
是一個shell內置它不遵循有關平時公約引用,所以只引用參數將輸出引號而不是刪除它們。
@ Joey ..如果使用多個標籤,在一個大的XML文件中。 –
@ Nevin:你仍然必須逃避每個'<' and '>'。沒有什麼特別的。話雖如此,我建議不要在一行中回顯大型XML文件......這顯然是有原因的。 – Joey
@ Joey..Got你的觀點現在...謝謝 –
一個簡單的解決方案是使用延遲擴展,因爲這不會更改任何特殊字符。
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
'echo!line!'只要'line'變量中沒有'!'就會工作。對此有何補救? –
不,如果'line'包含'!',那麼它將毫無問題地工作,但是如何將感嘆號標記到變量中並不總是顯而易見的。試試'set「line = Hello ^!」 &echo!line!' – jeb
你是100%正確的。我一定是看了一些東西! –
另一種方法:
@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 #
的方式來輸出>
字符是^
轉義字符加前綴:
echo ^>
將打印只需
>
喬伊的回答並不適合我。 執行
echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
後,我得到這個錯誤 慶典:附近意外的標記'>」語法錯誤
該解決方案爲我工作:
echo "<?xml version=\"1.0\" encoding=\"utf-8\">" > myfile.txt
請注意,這將保留輸出 –
在爲了在Windows上使用特殊字符(例如'>'),需要放置特殊的轉義字符befo重新吧。
例如
echo A->B
,因爲將無法正常工作 '>' 必須由 '^' 轉義:
echo A-^>B
有一個短的批處理文件,它打印一組基本的特殊字符及其轉義序列。
中的引號但對於引號,脫字符是轉義字符,使用兩個引號是錯誤的,因爲它只增加了第二個引號。 'echo line1「」&echo line2' vs'echo Line1 ^「&echo line2' – jeb
@jeb:謝謝,我更新了截圖和腳本。 – orbitcowboy
爲什麼不使用單引號?
echo '<?xml version="1.0" encoding="utf-8" ?>'
輸出
<?xml version="1.0" encoding="utf-8" ?>
的[逃生在Windows命令提示角括號]可能重複(http://stackoverflow.com/questions/251557/escape-angle-brackets-in-a- windows-command-prompt) – Helen
[批量字符轉義]可能的重複(http://stackoverflow.com/questions/6828751/batch-character-escaping) –