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
Please also mark the comments that contributed to the solution of the article
Content-Key: 583970
Url: https://administrator.de/contentid/583970
Printed on: April 25, 2024 at 17:04 o'clock
3 Comments
Latest comment
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