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



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

C:users*appdataRoamingFTRGoldMainFTRSettings.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和基于通配符的路径来查找所有匹配的文件。

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

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

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

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

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