尝试在每个用户的 appdata/roaming 文件夹中的 XML 文件中搜索和替换几行

Attempting to search and replace a few lines in an XML file in every user's appdata/roaming folder

我对 windows 管理还是有点陌生​​,对 Powershell 也很陌生,所以请原谅我的无知。我写了下面的单行代码,并试图对其进行调整,以便它可以修改 PC 上每个现有用户的 FTRSettings.xml 文件。我担心使用以下带有通配符的路径代替用户名只会替换它找到的第一个文件。

C:\users\*\appdata\Roaming\FTR\GoldMain\FTRSettings.xml

已测试并运行从 appdata\Roaming\FTR\GoldMain\ 目录执行的一个衬垫。

((Get-Content -Path .\FTRSettings.xml -Raw) -replace '<Setting name="audioLevelsVisible" type="11">0</Setting>','<Setting name="audioLevelsVisible" type="11">-1</Setting>' -replace '<Setting name="inputLevelsVisible" type="11">0</Setting>','<Setting name="inputLevelsVisible" type="11">-1</Setting>' -replace '<Setting name="logSheetPaneViewState" type="11">0</Setting>','<Setting name="logSheetPaneViewState" type="11">-1</Setting>')

我想知道是否有人可以指出正确的方向。

单独处理每个文件:

  • 使用 Get-ChildItem 和您的 wildcard-based 路径来查找所有匹配的文件。

  • ForEach-Object遍历所有匹配的文件并对每个文件执行字符串替换和更新。

注意:为简洁起见,我使用单个 -replace 操作。

Get-ChildItem -Path C:\users\*\appdata\Roaming\FTR\GoldMain\FTRSettings.xml | 
  ForEach-Object {
    $file = $_
    ($file | Get-Content -Raw) -replace 'foo', 'bar' |
      Set-Content -Encoding utf8 -LiteralPath $file.FullName -WhatIf
  }

注意:上面命令中的-WhatIf common parameter预览操作。一旦您确定该操作将执行您想要的操作,请删除 -WhatIf

请注意使用 -Encoding 来显式控制字符编码,因为 PowerShell 中永远不会保留原始编码;相反,应用 cmdlet 自己的默认值 - 根据需要进行调整。