当字符串包含引号时使用替换
Using Replace when string contains quotes
我阅读了其他帖子并尝试了他们的解决方案,但我似乎无法让它为我工作。
我需要更新多个 XML 文件并将节点值从 <Option name="fldsep" value="|" />
更改为 <Option name="fldsep" value="~" />
。
当我执行 { $_.Replace("|", "~") } | Set-Content $_.FullName
并完美更新 XML 文件时它可以工作,但我不希望它覆盖存在的其他 |
。
我试过:
{ $_.Replace('<Option name="fldsep" value="|" /> ','<Option name="fldsep" value="~" /> ') } | Set-Content $_.FullName
但它不会更新 XML 文件。
如有任何帮助,我们将不胜感激!
完整代码供参考:
$pathTest = "C:\Test" Get-ChildItem -path $pathTest -recurse -include "*.tf.*" | % {
$con = Get-Content $_.FullName
$con | % { $_.Replace('<Option name="fldsep" value="|" /> ','<Option name="fldsep" value="~" /> ') } | Set-Content $_.FullName
}
完整的 XML 部分如下所示:
<TransformationSourceOptions>
<Option name="codepage" value="ANSI" />
<Option name="recsep" value="LF" />
<Option name="fieldcount" value="0" />
<Option name="fldsep" value="|" />
<Option name="fldsdelim" value="None" />
<Option name="fldedelim" value="None" />
<Option name="header" value="False" />
<Option name="altfldsep" value="None" />
<Option name="soffset" value="0" />
<Option name="autostyle" value="False" />
<Option name="stylesamplesize" value="5000" />
<Option name="lstrip" value="False" />
<Option name="tstrip" value="False" />
<Option name="field1isrectypeid" value="False" />
<Option name="nullind" value="none" />
<Option name="emptyfieldsnull" value="False" />
<Option name="numericformatnormalization" value="False" />
<Option name="layoutmismatch" value="0" />
</TransformationSourceOptions>
如果要更改 XML 文档中的属性值,请使用 XML!
的内置支持
# Load xml doc
$TransformDoc = [xml](Get-Content .\options.xml)
# Find option node and change value of "value" attribute
$TransformDoc.SelectSingleNode('//Option[@name="fldsep"]').value = "~"
# Save your changes to the document
$TransformDoc.Save("options.xml")
我阅读了其他帖子并尝试了他们的解决方案,但我似乎无法让它为我工作。
我需要更新多个 XML 文件并将节点值从 <Option name="fldsep" value="|" />
更改为 <Option name="fldsep" value="~" />
。
当我执行 { $_.Replace("|", "~") } | Set-Content $_.FullName
并完美更新 XML 文件时它可以工作,但我不希望它覆盖存在的其他 |
。
我试过:
{ $_.Replace('<Option name="fldsep" value="|" /> ','<Option name="fldsep" value="~" /> ') } | Set-Content $_.FullName
但它不会更新 XML 文件。
如有任何帮助,我们将不胜感激!
完整代码供参考:
$pathTest = "C:\Test" Get-ChildItem -path $pathTest -recurse -include "*.tf.*" | % {
$con = Get-Content $_.FullName
$con | % { $_.Replace('<Option name="fldsep" value="|" /> ','<Option name="fldsep" value="~" /> ') } | Set-Content $_.FullName
}
完整的 XML 部分如下所示:
<TransformationSourceOptions>
<Option name="codepage" value="ANSI" />
<Option name="recsep" value="LF" />
<Option name="fieldcount" value="0" />
<Option name="fldsep" value="|" />
<Option name="fldsdelim" value="None" />
<Option name="fldedelim" value="None" />
<Option name="header" value="False" />
<Option name="altfldsep" value="None" />
<Option name="soffset" value="0" />
<Option name="autostyle" value="False" />
<Option name="stylesamplesize" value="5000" />
<Option name="lstrip" value="False" />
<Option name="tstrip" value="False" />
<Option name="field1isrectypeid" value="False" />
<Option name="nullind" value="none" />
<Option name="emptyfieldsnull" value="False" />
<Option name="numericformatnormalization" value="False" />
<Option name="layoutmismatch" value="0" />
</TransformationSourceOptions>
如果要更改 XML 文档中的属性值,请使用 XML!
的内置支持# Load xml doc
$TransformDoc = [xml](Get-Content .\options.xml)
# Find option node and change value of "value" attribute
$TransformDoc.SelectSingleNode('//Option[@name="fldsep"]').value = "~"
# Save your changes to the document
$TransformDoc.Save("options.xml")