$gameNames.menu.game | foreach { $_.Name = $_.Name -replace '\(.*', "(USA)" }
<?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>
Eu preciso remover tudo depois do primeiro "(" no campo "nome do jogo" e substituir este conteúdo por "(EUA)", então o primeiro nome do jogo precisa mudar de:
My - Game (Japan) (Eu,Br)
Some Other Cool Game (Stuff) (Foo) (Bar)
Para:
My - Game (USA)
Some Other Cool Game (USA)
Estou muito perto e consigo que o Powershell imprima os nomes corrigidos com:
[xml]$gameNames = Get-Content '.\myXML.xml' $gameNames.menu.game | foreach { $_.Name -replace '(.*', "(USA)" }
O que eu não consigo descobrir é como salvar esses novos nomes nos nós do "nome do jogo". Eu tentei adicionar | Set-Content '.\myXML.xml'
ao final do meu pipe, mas isso substitui o original .xml pelos nomes de jogos renomeados e nenhum dos dados originais.
* Edit: Existe um "\" antes do "(" na última linha de reposicionamento. Ele não aparece, mas (sem espaços), a linha deve se parecer com:
-replace ' \ ( . * '
Tags powershell xml