2015-10-08 98 views
1

我想使用powershell命令從批處理文件更新xml文件,並認爲我很近但有語法問題。從批處理文件更新PowerShell的xml文件

這是powershell命令是在批處理文件:

powershell -Command "& {$xml = [xml](Get-Content "C:\Temp\Test\configuration.xml"); $xml.root.settings.installingUser.value = 'NewID'; $xml.Save("C:\Temp\Test\configuration_ny.xml")}" 

實施例對configuration.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <test engine="2011.0.0" /> 
    <settings> 
      <installDir value="C:\Program Files\App\Path" /> 
      <installingUser value="InstallID" /> 
    </settings> 
</root> 

該錯誤消息表示它缺少結束括號並希望所有幫助或建議我可以解決這個問題。

+0

'的powershell -Command 「&{$ XML = [XML](獲取內容\」 C:\ TEMP \測試\ configuration.xml中\「); $ xml.root.settings .installingUser.value ='NewID'; $ xml.Save(\「C:\ Temp \ Test \ configuration_ny.xml \」)}「' – PetSerAl

+0

問題是使用-Co​​mmand參數,遇到問題,諸如花括號和引號等字符在被傳遞到Powershell之前將被命令提示符誤解。您可以通過添加幾層轉義來打結,或者有一種更簡單的方法 - 使用-EncodedCommand參數。看到這[回答](http://stackoverflow.com/a/30269513/1419175) –

回答

1

要擴展PetSerAl的評論,-Command之後的參數是一個由雙引號包圍的字符串。該雙引號字符串本身包含雙引號字符。因此,您需要在圍繞文件名的雙引號之前放置反斜槓,以便命令解析器知道這些雙引號字符實際上是字符串數據的一部分,而不是字符串分隔符。

powershell -Command "& {$xml = [xml](Get-Content " 

當命令解析器看到您的原始命令時,它認爲Get-Content之後的雙引號是該命令的結尾。這就是爲什麼它說它找不到右括號。它在Get-Content命令之前只看到了左括號。

0

感謝您的答案,經過一些測試後,我發現我可以使用單配額,現在可以使用。

powershell -Command "& {$xml = [xml](Get-Content '%InstConfXML%'); $xml.root.settings.installingUser.value = '%InstUsrXML%'; $xml.Save('%InstConfXML%')}" 

由於