2016-12-01 3 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ファイルが特定の書式を維持することが保証されていないためです。どんな編集もコンテキスト認識でなければならず、文字列置換はそうではありません。 3つのeqvivalent XMLフラグメントを考えてみましょう:要素名に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 > 

<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> 

それは本当に処理するために、あまり意味がありません。文字列としてのXML、それは?

幸いにも、Powershellには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> 

、そうのようなものです。

+0

返信いただきありがとうございます。ファイルの中の.xml形式のみでwildflyも変更したいと思います。スクリプト内のファイルのパスを指定することはできます – venky

関連する問題