Text in Datei suchen und ersetzen per Batch bzw. Powershell – ganz einfach

Text in Datei suchen und ersetzen per Batch bzw. Powershell

Du musst in vielen Text- oder XML-Dateien bestimmte Textstellen austauschen? Kurz zu meiner Geschichte: Bei einem Kunden musste ich einen Server wechseln auf dem eine XNotar Freigabe lag, nach einem Telefonat mit dem Support meinte dieser man müsse manuell alle Pfade in diversen XML-Dateien wechseln. Eine andere Möglichkeit gäbe es nicht da die Entwickler von XNotar keine Verbesserung diesbezüglich planen.

Es handelte sich bei mir um Rund 30 Dateien in denen ich vereinzelt verschiedenste Änderungen durchführen müsste, würde ich dies händisch machen, wäre ich wohl eine Woche beschäftigt.

Also habe ich ein Skript hierfür geschrieben, welches ich dir hier zur Verfügung stelle. Das Skript durchsucht den Ordner den du unter $ersetzungspfad angegeben hast und sucht sich dort nur die Dateien die du unter „Get-Childitem -Include *.xml,*.txt“ angegeben hast. In diesen Dateien sucht das Skript dann nach den Textpassagen die du unter $search angegeben hast und ersetzt diese mit dem Inhalt, den du unter $replace angegeben hast. Teste dieses Skript erst in einem Testordner, bevor du es produktiv einsetzt.

Schau dir auch meine anderen Beiträge an oder vielleicht willst du wissen wie man eine Active Directory richtig installiert? Lasse einen Kommentar da, wenn dir der Artikel geholfen hat.

16 Gedanken zu „Text in Datei suchen und ersetzen per Batch bzw. Powershell – ganz einfach“

  1. Hi, danke für dein Video. Kannst du mir (uns) vielleicht erklären wie ich eine Eingabe replacen kann?
    Also ich habe einen Text mit dummy1 dummy2 undsoweiter … ich habe 5 Eingabe die der User eingibt. Die dummys sollen gegen die Eingabe ersetzt werden. Wie würde hier der Code ausschauen…?
    Es werden hauptsächlich nur Strings also einzelne Buchstaben oder Sonderzeichen ersetzt…

    Schöne Grüße
    DZ

    Antworten
  2. Cooles Script, gutes Video, Danke
    Kannst du mir bitte behilflich sein, ich möchte gerne alle Anführungszeichen („) ersetzen gegen 2 Apostroph (“). Wie sieht das allgemein bei Sonderzeichen aus?

    Antworten
    • Dafür gibt es mehrer Möglichkeiten, entweder du packst die Anführungszeichen zwischen zwei hochkommas oder du machst vor solchen Sonderzeichen dieses Zeichen

      also also Beispiel „““
      Das dürfte so funktionieren.

      Antworten
  3. Hi Viktor,
    Danke für die gute Idee!!
    ich versuche ein Komma durch ein Semikolon zu ersetzen.
    Pfad ist richtig, die Dateien sind vorhanden.
    Dennoch klappt es nicht, die Batch geht im cmd kurz auf und verschwindet sofort, ohne Ergebnis.
    Hättest du einen Typ für mich?

    Grüße. Martin

    #Pfad in dem die Dateien gescannt werden sollen, der Stern am Ende muss vorhanden sein
    $ersetzungspfad = „D:\xxx\*“

    #Textpassagen die ersetzt werden sollen, kann beliebig erweitert werden
    $search = @(„,“)
    #Der Inhalt der die oben genannten Textpassagen überschreiben soll, ACHTUNG muss in gleicher Reihenfolge sein.
    $replace = @(„;“)

    ##################################################################################################
    #Abfrage ob du die Reihenfolgen richtig hast, hier kannst du prüfen ob alles korrekt ersetzt wird#

    $i=0 #Hilfsvariable
    foreach ($s in $search){ #Schleife die ausgibt, was mit welchem Wert ersetzt werden soll
    Write-Host „Du willst“$s „mit “ $replace[$i] “ ersetzen“
    $i++}
    $alles_korrekt = Read-Host -Prompt „Ist alles richtig? y/n“ #Abfrage ob alles korrekt eingetragen wurde

    ##################################################################################################
    ###################################Der Ersetzungsvorgang##########################################

    $i=0 #Hilfsvariable
    if($alles_korrekt -ieq „y“){ #wenn oben alles korrekt war und mit y geantwortet wurde beginnt der Vorgang
    foreach ($s in $search){
    Get-ChildItem -Path $ersetzungspfad -Include *.csv,*.properties| Foreach-Object {Get-Content $_ | Out-String | Foreach-Object {$_.Replace($s,$replace[$i])} | Set-Content $_}
    $i++}}

    Antworten
  4. Hallo Viktor,

    danke für das Video. Top! hilft mir wirklich sehr weiter.

    Ich muss das Script aber 2x laufen lassen um den 3ten Eintrag in einer Zeile zu ersetzen.

    Bsp.: eine Zeile aus den CSV Dateien im Ordner:
    xx;PU11H;C;x;ED;PU11H;PU11H;133;

    Ich suche mit Deinem Script nach „;PU11H;“ und ersetze es mit „;PU11H19-01;“

    Ergebnis:
    xx;PU11H19-01;C;x;ED;PU11H19-01;PU11H;133;

    Kannst du mir helfen damit auch der 3te Eintrag ersetzt wird, ohne das ich das Script 2x laufen lassen muss?

    Danke & Grüße, Oliver

    Antworten
  5. Hallo Viktor,

    Vielen Dank für das Skript.
    Ich versuche in einer Datei, den String “ -WjBeginn:20220101 “ so zu ersetzen, dass nach jedem Skriptdurchlauf immer das aktuelle Jahr vom Systemdatum drin steht.
    Also in diesem Jahr “ -WjBeginn:20220101 „, nächstes Jahr “ -WjBeginn:20230101 „, usw…
    Kann mir jemand dabei helfen?

    Vielen Dank,

    Gruß Wolfgang

    Antworten
  6. Hallo Viktor

    Cooles Script !!!

    Wie kann das Script angepasst werden, wenn ich darunter noch Unterordner habe und die ebenfalls durchsucht werden sollen?

    Ich danke dir für ein Feedback.

    Liebe Grüsse
    Peter

    Antworten
    • klar … 🙂

      $i=0 #Hilfsvariable
      if($alles_korrekt -ieq „y“){ #wenn oben alles korrekt war und mit y geantwortet wurde beginnt der Vorgang
      foreach ($s in $search){
      Get-ChildItem -Path $ersetzungspfad -Recurse -Include *.ini,*.cfg,*.txt| Foreach-Object {Get-Content $_ | Out-String | Foreach-Object {$_.Replace($s,$replace[$i])} | Set-Content $_}
      $i++}}

      LG Peter

      Antworten
  7. Hallo Viktor,
    ich danke Dir für Dein Skript. Genau das brauche ich.
    Ich hatte Probleme, weil in dem Skript oben
    $replace[$i] falsch geschrieben ist:
    $replace[$i]. Bitte ändere das doch , damit mehr „Gefällt mir“ angeklickt wird.
    Als Anfänger habe ich lange gebraucht, bis ich es raus hatte.

    Ich habe noch ein Problem :
    Ich muss eine xml-Datei aufbereiten
    ich möchte das “ mitten im Ausdruck mitfinden und mitersetzen
    account_no=“45000
    ersetzen durch
    account_no=“4400

    $search = @(“ account_no='“45000″)
    $replace = @(“ account_no=“4400″) geht leider nicht

    Kannst Du mir die Zeilen so aufschreiben, dass es einfach copy and paste machen kann. Mir wäre die Funktion eine Spende von 30 Euro wert.

    So sehen die Zeilen in der xml-Datei aus:

    Antworten

Schreibe einen Kommentar