2016-12-01 59 views
-1

我是批處理腳本的新手。我想替換特定文件中的字符串。 在下面的腳本中我收到錯誤。使用批處理腳本替換xml文件中的字符串

@echo off 
$standalone = Get-Content 'C:\wildfly\standalone\configuration\standalone.xml' 

$standalone -replace '<wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>','<wsdl-host>${jboss.bind.address:0.0.0.0}</wsdl-host>' | 
Set-Content 'C:\wildfly\standalone\configuration\standalone.xml' 
+4

第1行是批處理,其餘部分是PowerShell。 –

+0

我想僅在批處理腳本中編寫 – venky

+5

您不想批量編輯XML文件。相信我。 –

回答

1

編輯XML的正確方法是將其作爲XML文檔處理,而不是字符串。這是因爲XML文件不能保證保持特定的格式。任何編輯應該是上下文感知和字符串替換不是。考慮三個eqvivalent XML片段:

<wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host> 

<wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host > 

<wsdl-host >${jboss.bind.address:127.0.0.1}</wsdl-host > 

注意,在元素名稱whitespacing是不同的,it's legal增加一些。更重要的是,在實踐中,很多幹脆丟棄在元素值換行符實現的,所以以下兩種可能提供一個配置解析器相同的結果:

<wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host> 

<wsdl-host>${jboss.bind.address:127.0.0.1} 
</wsdl-host> 

這真的沒有多大意義處理XML作爲字符串,是嗎?

幸運的是,Powershell內置了對XML文件的支持。一個簡單的方法就是像這樣,

# Mock XML config 
[xml]$x = @' 
<root> 
<wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host> 
</root> 
'@ 

# Let's change the wsdl-host element's contents 
$x.root.'wsdl-host' = '${jboss.bind.address:0.0.0.0}' 

# Save the modified document to console to see the change 
$x.save([console]::out) 

<?xml version="1.0" encoding="ibm850"?> 
<root> 
    <wsdl-host>${jboss.bind.address:0.0.0.0}</wsdl-host> 
</root> 

如果您不能使用PowerShell和被卡住批處理腳本,你真的需要使用第三方XML處理程序。

+0

感謝您的回覆,我想在文件中更改文件中的wildfly,僅限於.xml格式。我可以在腳本中提供文件的路徑 – venky

相關問題