当字符串包含引号时使用替换

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")