如何替换2个特定标签之间的字符串

时间:2016-09-29 10:10:41

标签: powershell tags

我有一个文本文件,其中包含以下文字:

<ServerAddress>.</ServerAddress>
<ServerDatabase>test</ServerDatabase>
<ServerUsername>jimmy</ServerUsername>

我希望能够取代“。”使用read-host输入的文本。 例如,将其从<ServerAddress>.</ServerAddress>更改为

<ServerAddress>server1</ServerAddress>

我必须完成的代码......但是它会一遍又一遍地将文件中的所有内容替换为相同的字符串,因此在上面的示例中,它会用<ServerAddress>server1</ServerAddress>替换所有内容

这是我到目前为止所做的:

pushd "C:\PSF\Move to V6\DTT Files"
$configFiles = Get-ChildItem . *.dtt -rec
$servername = Read-Host 'What the server name?'
$regex='(m?)>[^<]+<'
foreach ($file in $configFiles)

{
(Get-Content $file.PSPath) |
Foreach-Object { "<ServerAddress>.</ServerAddress>" -replace $regex, ">$servername<" } |
Set-Content $file.PSPath
}

1 个答案:

答案 0 :(得分:0)

请勿使用正则表达式替换XML内容。而是将文件加载为XML,选择节点并设置值:

示例:

[xml]$xml =
@'
<root>
    <ServerAddress>.</ServerAddress>
    <ServerDatabase>test</ServerDatabase>
    <ServerUsername>jimmy</ServerUsername>
</root>
'@

$xml.DocumentElement.ServerAddress = 'newServer'
$xml.Save('yourLocation')