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
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?
Vielen Dank für Eure Hilfe!
Gruß,
Fabian
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
#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?
Vielen Dank für Eure Hilfe!
Gruß,
Fabian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 583970
Url: https://administrator.de/contentid/583970
Ausgedruckt am: 22.11.2024 um 00:11 Uhr
3 Kommentare
Neuester Kommentar
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
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. ;)
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. ;)
Zitat von @Doskias:
Mein Vorschlag:
hinter den ersten beiden Replace noch einmal:
$input = Get-Content $path
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