noleva
Goto Top

Powershell Replace in mehreren Zeilen

Hallo Community,

ich stell mich gerade etwas blöd an wahrscheinlich, aber ich finde aufs verrecken den Fehler in meinem Code nicht.

Kurz und knapp:

ich möchte einfach nur Zeilen in einer Datei mit einen anderen Text füllen.
Es betrifft genau genommen drei Zeilen die geändert werden sollen.
Wenn ich meinen Befehl ausführe ändert er mir irgendwie nichts. Zeile für Zeile einzeln, kein Problem.

Ich bin nicht so sehr bewandert in Powershell, aber an und für sich sollte doch hieran nicht so viel Falsch sein oder?
Die # muss auch weg, da die in dem File auskommentiert.
Die Zeile 9 könnte man bestimmt auch anders lösen, aber so fand ich es für mich selber einfacher und einheitlicher face-smile

#Pfad zu idea.properties
$path = 'C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2019.1.1\bin\idea.properties'  
#Datei einlesen
$input = Get-content $path

#Inhalt ändern
$input.Replace('# idea.config.path=${user.home}/.PyCharmCE/config', 'idea.config.path=C:/PycharmC/config') | Set-Content $path  
$input.Replace('# idea.system.path=${user.home}/.PyCharmCE/system', 'idea.system.path=C:/PycharmC/system') | Set-Content $path  
$input.Replace('# idea.plugins.path=`${idea.config.path}/plugins', 'idea.plugins.path=${idea.config.path}/plugins') | Set-Content $path  

Ich habe es auch mit ; am Ende jeder Zeile versucht, mit " anstatt von ' und die einzelnen Sonderzeichen # und $ mit ' maskiert. Alles irgendwie ohne Erfolg.
Komischerweise wird je nach meiner "Variation" nur die Zeile 7 und 9 durchgeführt und 8 nicht.

Alles etwas Strange aber ich denke die Lösung ist sicherlich sehr einfach, ich komme nur nicht drauf.

Sieht da jemand den Fehler und kann mir kurz aushelfen? face-smile

Vielen Dank für Eure Hilfe!

Gruß,
Fabian

Content-Key: 583970

Url: https://administrator.de/contentid/583970

Printed on: April 25, 2024 at 00:04 o'clock

Member: Doskias
Solution Doskias Jul 02, 2020 updated at 10:51:44 (UTC)
Goto Top
Moin Fabian,

ich habe mir das mal angeschaut und nachgebaut. Mein "Problem" dabei war/ist, dass lediglich die letzte Zeile verändert wird. Nach etwas Analyse war es mit klar. Schau dir mal an was du machst:

Du liest in Zeile 4
Du änderst etwas in Zeile 7 und schreibst es in die Datei
Du änderst erneut was in Zeile 8 und schreibst die Änderung in die Datei

Dein Haken abei: Du liest nicht erneut ein. Wenn Zeile 7 und 8 etwas geändert werden muss, dann überschreibst du dir die Änderung aus Zeile 7. Wenn ich etwas Ändern will, was nicht existiert bekomme ich eine Method not Found-Exeption.

Mein Vorschlag:
hinter den ersten beiden Replace noch einmal:
$input = Get-Content $path

#Inhalt ändern
$input.Replace('# idea.config.path=${user.home}/.PyCharmCE/config', 'idea.config.path=C:/PycharmC/config') | Set-Content $path  
$input = Get-content $path
$input.Replace('# idea.system.path=${user.home}/.PyCharmCE/system', 'idea.system.path=C:/PycharmC/system') | Set-Content $path  
$input = Get-content $path
$input.Replace('# idea.plugins.path=`${idea.config.path}/plugins', 'idea.plugins.path=${idea.config.path}/plugins') | Set-Content $pathcode>  

Wenn du den Inhalt nicht aktualisierst, dann basieren deine Änderungsbefehle auf dem Ursprungsinhalt deiner Datei.

Bei mir konnte ich damit deinen Fehler nicht mehr reproduzieren. ;)
Member: noleva
noleva Jul 02, 2020 at 11:28:10 (UTC)
Goto Top
Hi,

ja danke für den Tipp.
Sowas habe ich mir schon fast gedacht, aber irgendwie kam die Idee nicht richtig an face-smile

Jetzt gehts!

Gruß
Mitglied: 144705
144705 Jul 02, 2020 updated at 13:49:20 (UTC)
Goto Top
Zitat von @Doskias:
Mein Vorschlag:
hinter den ersten beiden Replace noch einmal:
$input = Get-Content $path

Viel zu umständlich und Ressourcenfressend nur einen einzigen Replace zu machen und es dann erneut zurück zu schreiben, das erledigt man in einem Waschgang indem man das Ergebnis einfach einer Variablen zuweist und erst nach allen Replacements die Daten zurück schreibt ...
$input = $input.Replace('# idea.config.path=${user.home}/.PyCharmCE/config', 'idea.config.path=C:/PycharmC/config')  
$input = $input.Replace('# idea.system.path=${user.home}/.PyCharmCE/system', 'idea.system.path=C:/PycharmC/system') | Set-Content $path  
$input | Set-Content $path