【发布时间】:2018-01-26 06:23:37
【问题描述】:
我正在尝试更新一组基于 XML 的 .config 文件。文件中有一个字符串包含我无法用我的脚本替换的加号:
< SharedPassKey=123456789abcdefghi/JKLM+nopqrst= />
如果我包含加号,脚本什么也不做。由于所有配置都不同,我需要替换文本 - 不能只使用新文件。
想要的结果是文件中的匹配值被替换为指定的值,但+ 符号不允许这样做。这是我的 PS 脚本:
$DIRs = Get-ChildItem -Path "C:\TEST" -Directory
Get-ChildItem $DIRs -File -Recurse -Filter *.config |
ForEach { (Get-Content $_.FullName) |
ForEach { $_ -replace '< SharedPassKey=123456789abcdefghi/JKLM+nopqrst= />','< SharedPassKey=123456789abcdefghi/JKLM.nopqrst= />' } |
Set-Content $_.FullName }
作为测试,我将所有文本替换为加号,它工作正常,但加号和后续出现在新文本的末尾,因为我已将“+nopqrst”从脚本中删除。
在 PSv3 上运行,仅供参考。
【问题讨论】:
-
在加号前试试反斜杠
-
< foo=bar= />是无效的 XML。你的数据真的像这样吗?否则使用 XML 解析器可能是更合适的方法。 -
@AnsgarWiechers - 不,我的 XML 是正常的,这只是一个删除所有信息的快速表示。
标签: windows powershell replace special-characters