2016-12-01 2 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 и застряли с помощью пакетных сценариев, вам действительно нужно использовать 3rd программу манипуляции стороны XML.

+0

Спасибо за ваш ответ, и я хочу изменить в wildfly, что тоже в файлах в формате .xml only.where можно указать путь к файлу в скрипте – venky