Text ersetzen mit Batch
Hallo zusammen,
ich frage mich ob folgendes per Batch möglich ist, da ich mich mit Perl rumschlage und es nicht auf die Kette bekomme:
Folgender Beispieltext innerhalb einer .txt im Beispielpfad C:/User/Test
Es sind immer mehrere Textdateien im Ordner vorhanden, welche identisch aufgebaut sind, jedoch inhaltlich unterschiedlich sind.
(XXXXX sind personenbezogene Daten)
Txt Datei 1:
Txt Datei 2:
Ich möchte gerne folgedes:
Das erste "null" soll IMMER bei jeder .txt ersetzt werden durch eine Zahl welche keine Abhängigkeit hat, zum Beispiel immer durch 200088.
Das zweite "null" soll ersetzt werden in Abhängigkeit durch ein bereits gefundenes Word - im ersten Fall GYN, im zweiten Fall CH1.
Es sind immer mehrere Textdateien im Ordner vorhanden, welche identisch aufgebaut sind, jedoch inhaltlich unterschiedlich sind.
Möglich ist auch die Schritte zu trennen und zwei Batch Dateien zu erstellen, welche kurz nacheinander laufen.
In Perl bekomme ich Schritt 1 programmiert, allerdings hänge ich bei Schritt 2.
Da die Batch später auf einem Server laufen soll wäre der weg über die CMD und Batch einfacher.
Danke ;)
ich frage mich ob folgendes per Batch möglich ist, da ich mich mit Perl rumschlage und es nicht auf die Kette bekomme:
Folgender Beispieltext innerhalb einer .txt im Beispielpfad C:/User/Test
Es sind immer mehrere Textdateien im Ordner vorhanden, welche identisch aufgebaut sind, jedoch inhaltlich unterschiedlich sind.
(XXXXX sind personenbezogene Daten)
Txt Datei 1:
Txt Datei 2:
Ich möchte gerne folgedes:
Das erste "null" soll IMMER bei jeder .txt ersetzt werden durch eine Zahl welche keine Abhängigkeit hat, zum Beispiel immer durch 200088.
Das zweite "null" soll ersetzt werden in Abhängigkeit durch ein bereits gefundenes Word - im ersten Fall GYN, im zweiten Fall CH1.
Es sind immer mehrere Textdateien im Ordner vorhanden, welche identisch aufgebaut sind, jedoch inhaltlich unterschiedlich sind.
Möglich ist auch die Schritte zu trennen und zwei Batch Dateien zu erstellen, welche kurz nacheinander laufen.
In Perl bekomme ich Schritt 1 programmiert, allerdings hänge ich bei Schritt 2.
Da die Batch später auf einem Server laufen soll wäre der weg über die CMD und Batch einfacher.
Danke ;)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 479144
Url: https://administrator.de/forum/text-ersetzen-mit-batch-479144.html
Ausgedruckt am: 29.04.2025 um 21:04 Uhr
18 Kommentare
Neuester Kommentar

Um ehrlich zu sein gerne auch per powershell.
Get-ChildItem "D:\Ordner" -File -Filter *.txt | %{
$csv = Import-CSV $_.Fullname -Delimiter "|" -Header (1..15)
$csv.11 = "200088"
$csv.13 = $csv.'4'.split(" ")
($csv | convertto-csv -Delimiter "|" -NoTypeInformation | select -skip 1) -replace '"','' | sc $_.Fullname
}

Zitat von @NeVe29:
Ja, allerdings finde ich keine Lösung zu meinem zweiten anliegen, welche damit zusammenhängt.
s.o. "All in One"Ja, allerdings finde ich keine Lösung zu meinem zweiten anliegen, welche damit zusammenhängt.

Doch hier natürlich getestet. Btw. es wird nichts ausgegeben sondern nur die bestehenden Dateien verändert.
Auch wenn ich den Code im Powershell ausführe passiert nichts. Kann mir da noch jemand helfen? Muss ich noch etwas ersetzen?
Den Pfad in dem die Dateien liegen
Als Anfänger erst mal Grundlagen lesen:
https://www.windowspro.de/andreas-kroschel/powershell-scripts-ausfuehren
Ich hab das ding jetzt in in eine .txt eingefügt, den Pfad angepasst und als batch gespeichert. Nach dem ausführen passiert garnichts.
Was steht wohl drüber Powershell!Auch wenn ich den Code im Powershell ausführe passiert nichts. Kann mir da noch jemand helfen? Muss ich noch etwas ersetzen?
Als Anfänger erst mal Grundlagen lesen:
https://www.windowspro.de/andreas-kroschel/powershell-scripts-ausfuehren

Das Problem lag zusätzlich daran dass die Datei eine .dat ist und keine .txt
Nein, ob dat oder txt ist wurscht Hauptsache beide haben Textinhalt, die Endung verändert nicht das Verhalten! Vorheriges Umbenennen ist unnötig! Einfach die Extension Includen fertsch.Get-ChildItem "C:\Users\gemuendadm\Desktop\PGTEST123\*" -File -Include *.txt,*.dat | %{
$csv = Import-CSV $_.Fullname -Delimiter "|" -Header (1..15)
$csv.11 = "200088"
$csv.13 = $csv.'4'.split(" ")
($csv | convertto-csv -Delimiter "|" -NoTypeInformation | select -skip 1) -replace '"','' | sc -Path ($_.Fullname -replace "\.txt$",".dat")
if ($_.Extension -eq ".txt"){del $_.Fullname -Force}
}

Bei Import-CSV die Kodierung festlegen, Parameter -Encoding und dann entsprechend dem Encoding "Default" oder UTF8 usw. festlegen!

Zitat von @NeVe29:
Nach der Ausgabe ist im Inhalt der Datei ein Zeilenumbruch zu erkennen. Der muss aber weg.
Das ist normal mit den CMDLets werden immer komplete Zeilen geschrieben, willst du das nicht, benutze statt Set-Content die NET-Funktion IO.File WriteAllText, die setzt keinen automatischen Umbruch.Nach der Ausgabe ist im Inhalt der Datei ein Zeilenumbruch zu erkennen. Der muss aber weg.
[IO.File]::WriteAllText("C:\Pfad\datei.csv","Inhalt")
Laut recherche ist dafür aber doch -replace '"','' zuständig oder etwa nicht?
Nein, das eliminiert nur die Anführungszeichen mit der per Default alle Daten eingeschlossen sind.