Powershell 在文件中切换字符串

Powershell 在文件中切换字符串,powershell,Powershell,我有一个字符串需要在两个值之间的文件中更改。我想做的是,如果我找到值A,然后更改为值B,如果我找到值B,然后更改为值A。将弹出一个消息框,说明值已更改为[xxxxx],然后背景图片也将相应更改 $path=c:\work\test.xml $A=AAAA $B=BBB $settings=获取内容$path $settings |%{$\.replace($A,$B)}设置内容$path 我不知道如何使用如果A然后替换为B或者如果B然后替换A。此外,上面的代码将删除文件中的其余内容,并且只将我

我有一个字符串需要在两个值之间的文件中更改。我想做的是,如果我找到值A,然后更改为值B,如果我找到值B,然后更改为值A。将弹出一个消息框,说明值已更改为[xxxxx],然后背景图片也将相应更改

$path=c:\work\test.xml
$A=AAAA
$B=BBB
$settings=获取内容$path
$settings |%{$\.replace($A,$B)}设置内容$path

我不知道如何使用
如果
A然后替换为B或者
如果
B然后替换A。此外,上面的代码将删除文件中的其余内容,并且只将我修改的部分保存回文件。

这没有经过广泛测试,但我认为它应该可以工作:

path = c:\work\test.xml
$A = 'AAAAA'
$B = 'BBBBB'

[regex]$regex = "$A|$B"

$text = 
Get-Content $path | 
foreach {
$regex.Replace($text,{if ($args[0].value -eq $A){$B} else {$A}})
}

$text | Set-Content $path

如果不确切知道数据是什么样子,很难确定。

假设
$A
$B
仅包含简单字符串而不是正则表达式,则可以使用具有通配符匹配的语句:

$path='c:\work\test.xml'
$A='AAAAA'
$B='BBBBB'
(获取内容$path)|%{
开关-通配符($\ux){
“*$A*”{$\替换[regex]::转义($A),$B}
“*$B*”{$\替换[regex]::转义($B),$A}
默认值{$}
}
}|设置内容$path
[regex]::Escape()
确保对正则表达式中具有特殊含义的字符进行转义,从而将值替换为文字字符串

如果您的目标是实现更高级的功能,可以使用正则表达式替换回调函数:

$path='c:\work\test.xml'
$A='AAAAA'
$B='BBBBB'
$rep=@{
$A=$B
$B=$A
}
$callback={$rep[$args[0]。组[1]。值]}
$re=[regex](“({0}{1})”-f[regex]::Escape($A),[regex]::Escape($B))
(获取内容$path)|%{
$re.Replace($\u$callback)
}|设置内容$path

谢谢,非常有用的解释。没有涉及正则表达式,只涉及简单字符串。