2014-12-02 35 views
3

我需要生成XML標籤的多行與GUID在其中:如何在PowerShell中對大括號{...}進行轉義?

<xmltag_10 value="{ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ}"/> 
<xmltag_11 value="{ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ}"/> 

我在$ GUID是生成的每個迭代循環這條線,它打印沒有大括號包裹

Write-Host ('xmltag_{0} value="{1}"/>' -f $i,$guid) 
<xmltag_10 value="ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ"/> 

添加一個大括號的全局唯一標識符,我得到

Write-Host ('xmltag_{0} value="{{1}}"/>' -f $i,$guid) 
<xmltag_10 value="{1}"/> 

我如何擺脫外部大括號?我已經使用`{{1}`}逃脫嘗試,但我得到

Error formatting a string: Input string was not in a correct format.. 

添加我的代碼複製和測試:

$i=10 
while($i -lt 21) 
{ 
    $guid = ([guid]::NewGuid()).ToString().ToUpper(); 
    Write-Host ('<xmltag_{0} value="{1}"/>' -f $i,$guid) 
    $i++ 
} 

回答

4

你並不需要使用-f;如果你需要使用文字大括號,這是一個不合適的選擇。試試這個:

$i=10 
while($i -lt 21) 
{ 
    $guid = ([guid]::NewGuid()).ToString().ToUpper(); 
    Write-Host "<xmltag_$i value=`"$guid`"/>" 
    $i++ 
} 

這將使用常規變量替換在雙引號的字符串(但它確實需要使用`」(反引號是轉義字符)轉義雙引號

+0

感謝這工作就。!。必須在裏面加一個花括號,一旦Stackoverflow最小定時器接受答案,我會接受 – orderof1 2014-12-02 19:32:53

+11

雖然-f不是必需的,只是爲了將來的參考,如果你確實需要的話:Write-Host('xmltag_ {0} value =「 {{{1}}}「/>'-f $ i,$ guid) – EBGreen 2014-12-02 19:35:59

+0

謝謝@EBGreen。我會選擇你作爲更好的答案 – ekkis 2015-09-06 05:31:50