Bestimmte Textpassagen via bat löschen
Hallo,
ich habe eine txt-Datei, in welcher ich durch eine bat bestimmte Zeilen löschen möchte.
So soll die Datei alle Zeilen, die mit "Name:" beginnen, aber in der gesamten Zeile nich das Wort "muster" enthalten sowie die Zeile danach löschen.
Die Datei sieht in etwas so aus:
Name: abcd
Gerät: 1234
Name: Muster 1
Gerät: 5678
Name: Muster 2
Gerät:
Name: xyz
Geräte: 5678
(Natürlich sind in der Datei noch ein paar andere Informationen enthalten)
Hieraus würde ich gerne eine neue Datei kreiieren mittels bat, in welcher diese anderen Informationen beibehalten werden aber der hier erwähnte Bereich dan reduziert wird auf:
Name: Muster 1
Gerät: 5678
Name: Muster 2
Gerät:
Am schönten wäre dann noch wenn die Zeilen mit "Gerät:" dann in eine Zeile zusammengefasst würden wie folgt:
Name: Muster 1
Name: Muster 2
Gerät: 5678
Wenn mir hier jemand helfen könnte wäre ich sehr denkbar.
Viele Grüße
Michael
ich habe eine txt-Datei, in welcher ich durch eine bat bestimmte Zeilen löschen möchte.
So soll die Datei alle Zeilen, die mit "Name:" beginnen, aber in der gesamten Zeile nich das Wort "muster" enthalten sowie die Zeile danach löschen.
Die Datei sieht in etwas so aus:
Name: abcd
Gerät: 1234
Name: Muster 1
Gerät: 5678
Name: Muster 2
Gerät:
Name: xyz
Geräte: 5678
(Natürlich sind in der Datei noch ein paar andere Informationen enthalten)
Hieraus würde ich gerne eine neue Datei kreiieren mittels bat, in welcher diese anderen Informationen beibehalten werden aber der hier erwähnte Bereich dan reduziert wird auf:
Name: Muster 1
Gerät: 5678
Name: Muster 2
Gerät:
Am schönten wäre dann noch wenn die Zeilen mit "Gerät:" dann in eine Zeile zusammengefasst würden wie folgt:
Name: Muster 1
Name: Muster 2
Gerät: 5678
Wenn mir hier jemand helfen könnte wäre ich sehr denkbar.
Viele Grüße
Michael
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 387331
Url: https://administrator.de/contentid/387331
Ausgedruckt am: 23.11.2024 um 19:11 Uhr
11 Kommentare
Neuester Kommentar
Hi Michael
schau dir das mal an:
Gruß speedlink
schau dir das mal an:
@echo off
chcp 1252 >nul
set "datei=D:\Ordner\meinedatei.txt"
powershell -Executionpolicy ByPass -NoProfile -Command "$geraete = @();$out = @();$out = select-string '%datei%' -Pattern '^Name:.*muster.*' -AllMatches -Context 1 -Encoding default | %%{$_.Line; $geraete += $_.Context.PostContext.split(':')[-1].trim()};$out += \"Geräte: $($geraete -join ',')\";$out | sc '%datei%' -Encoding Default"
@echo off
chcp 1252 >nul
set "datei=D:\Ordner\meinedatei.txt"
powershell -Executionpolicy ByPass -NoProfile -Command "$geraete = @();$out = @(); $out += [regex]::match((gc '%datei%' -raw),'(?ism).*?(?=^Name:)').Value;$out += select-string '%datei%' -Pattern '^Name:.*muster.*' -AllMatches -Context 1 -Encoding default | %%{$_.Line; $geraete += $_.Context.PostContext.split(':')[-1].trim()};$out += '';$out += \"Geräte: $($geraete -join ',')\";$out += '***ENDE DER DATEI***'; $out | sc '%datei%' -Encoding Default"
War nur ein "Tappfuhler".
Ist es möglich vor der ausgegebenen Zeile "Geräte" einen Zeilenumbruch zu erzwingen?
Klar, s.o.
Nochmal kopieren. Schade das du selbst keinen Ehrgeiz das selbst zu korrigieren .
Ich bin jetzt draußen, klappt hier.
Ich bin jetzt draußen, klappt hier.
Leider löscht er mir alles was vor AAO steht immernoch weg
Nun ja, wenn du oben schreibstDas "AAO" und das " *ENDE DER DATEI*" soll beibehalten werden.
Genau das tut der Code oben. Glaskugeln hat hier keiner.