我需要在两个值之间的文件中更改字符串。我想要做的是,如果我找到值A然后更改为值B,如果我找到值B然后更改为值A.将会有一个消息框弹出,表示该值已更改为[xxxxx]然后背景图片将是也相应改变了。
$path = c:\work\test.xml
$A = AAAAA
$B = BBBBB
$settings = get-content $path
$settings | % { $_.replace($A, $B) } | set-content $path
我无法弄清楚如何使用IF
A然后用B或IF
B替换然后替换A.此外,上面的代码将删除文件中的其余内容,并仅将我修改的部分保存回文件。
发布于 2019-02-22 13:17:28
假设$A
并且$B
只包含简单的字符串而不是正则表达式,您可以使用switch
带有通配符匹配的语句:
$path = 'c:\work\test.xml'
$A = 'AAAAA'
$B = 'BBBBB'
(Get-Content $path) | % {
switch -wildcard ($_) {
"*$A*" { $_ -replace [regex]::Escape($A), $B }
"*$B*" { $_ -replace [regex]::Escape($B), $A }
default { $_ }
}
} | Set-Content $path
将[regex]::Escape()
可确保其在正则表达式特殊meaing字符转义,因此该值被替换为文字字符串。
如果你的目标是更高级的东西,你可以使用带回调函数的正则表达式替换:
$path = 'c:\work\test.xml'
$A = 'AAAAA'
$B = 'BBBBB'
$rep = @{
$A = $B
$B = $A
}
$callback = { $rep[$args[0].Groups[1].Value] }
$re = [regex]("({0}|{1})" -f [regex]::Escape($A), [regex]::Escape($B))
(Get-Content $path) | % {
$re.Replace($_, $callback)
} | Set-Content $path
https://stackoverflow.com/questions/-100006390
复制相似问题