Powershell,重命名特定的.xml数据并保存更改

Powershell,重命名特定的.xml数据并保存更改

我已经进行了很多搜索/实验,我知道类似的问题已经得到解决,但我正在努力解决这个问题,并希望得到另一双眼睛的帮助。我的目标是解析 .xml 文件中的名称,修改名称,然后保存它们。我的 .xml 简介:

<?xml version="1.0"?>
<menu>
    <header>
        <listname>Thing</listname>
        <lastlistupdate>11/15/2011</lastlistupdate>
        <listversion>1.1 Final</listversion>
        <exporterversion>12.0</exporterversion>
    </header>
    <game name="My - Game (Japan) (Eu,Br)" index="true" image="0">
        <description>My - Game (Japan) (Eu,Br)</description>
        <cloneof></cloneof>
        <crc>8B70CB5B</crc>
        <manufacturer>Manufacturer</manufacturer>
        <year>1997</year>
        <genre>Shooter</genre>
        <rating>ESRB - T (Teen)</rating>
        <enabled>Yes</enabled>
    </game>
    <game name="Some Other Cool Game (Stuff) (Foo) (Bar)" index="" image="">
        <description>Some Other Cool Game (Stuff) (Foo) (Bar)</description>
        <cloneof></cloneof>
        <crc>34F0EE5B</crc>
        <manufacturer>Manufacturer</manufacturer>
        <year>2000</year>
        <genre>Shooter</genre>
        <rating>ESRB - T (Teen)</rating>
        <enabled>Yes</enabled>
    </game>

我需要删除“游戏名称”字段中第一个“(”之后的所有内容,并将该内容替换为“(美国)”,因此第一个游戏名称需要从以下位置更改:

My - Game (Japan) (Eu,Br)
Some Other Cool Game (Stuff) (Foo) (Bar)

到:

My - Game (USA)
Some Other Cool Game (USA)

我已经很接近了,而且我可以用 Powershell 打印出更正后的名称:

[xml]$gameNames = Get-Content '.\myXML.xml' $gameNames.menu.game | foreach { $_.Name -replace '(.*', "(USA)" }

不能弄清楚如何将这些新名称保存在“游戏名称”节点中。我尝试将其添加| Set-Content '.\myXML.xml'到管道的末尾,但这只会用重命名的游戏名称覆盖原始 .xml,而不会覆盖任何原始数据。

*编辑:在最后一行 -replace 中的“(”之前有一个“\”。它没有显示出来,但是(没有空格),该行应该看起来像:-replace' \ ( . * '

答案1

$gameNames.menu.game | foreach { $_.Name = $_.Name -replace '\(.*', "(USA)" }

相关内容