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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
##Skript um Textstellen in vielen Dateien zu ändern ##Autor Viktor Kosilov ##Datum 12.06.2020 ##Webseite kosilov.de #Pfad in dem die Dateien gescannt werden sollen, der Stern am Ende muss vorhanden sein $ersetzungspfad = "C:\Users\Administrator\Desktop\test\Xnotar_dateien\*" #Textpassagen die ersetzt werden sollen, kann beliebig erweitert werden $search = @("abc","123","xyz","456","def") #Der Inhalt der die oben genannten Textpassagen überschreiben soll, ACHTUNG muss in gleicher Reihenfolge sein. $replace = @("xxx","xxx","xxx","xxx","xxx") ################################################################################################## #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 *.xml,*.properties| Foreach-Object {Get-Content $_ | Out-String | Foreach-Object {$_.Replace($s,$replace[$i])} | Set-Content $_} $i++}} |
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.
1 Gedanke zu „Text in Datei suchen und ersetzen per Batch bzw. Powershell – ganz einfach“