grisu84
Goto Top

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

Content-Key: 387331

Url: https://administrator.de/contentid/387331

Ausgedruckt am: 19.03.2024 um 08:03 Uhr

Mitglied: 137289
Lösung 137289 22.09.2018 aktualisiert um 12:44:42 Uhr
Goto Top
Hi Michael
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"  
Gruß speedlink
Mitglied: Grisu84
Grisu84 22.09.2018 um 13:28:33 Uhr
Goto Top
Hallo speedlink

Das funktioniert schon super.

Problem ist nur, dass er mir auch die ganzen vorherigen Zeilen löscht.

Die zu untersuchenden Zeilen starten mit:

AAO
Name: abcd
Gerät: 1234
Name: Muster 1
Gerät: 5678
Name: Muster 2
Gerät:
Name: xyz
Geräte: 5678
 
***ENDE DER DATEI***

Das "AAO" und das " *ENDE DER DATEI*" soll beibehalten werden.
Mitglied: 137289
137289 22.09.2018, aktualisiert am 23.09.2018 um 09:33:53 Uhr
Goto Top
@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"  
Mitglied: Grisu84
Grisu84 22.09.2018 um 14:29:07 Uhr
Goto Top
Erhlate leider den Fehler (siehe Bild). Die Datei wird nicht mehr bearbeitet.

Eine weitere Änderung häte ich noch.
Ist es möglich vor der ausgegebenen Zeile "Geräte" einen Zeilenumbruch zu erzwingen?
fehler
Mitglied: 137289
137289 22.09.2018 aktualisiert um 14:48:39 Uhr
Goto Top
War nur ein "Tappfuhler".
Ist es möglich vor der ausgegebenen Zeile "Geräte" einen Zeilenumbruch zu erzwingen?
Klar, s.o.
Mitglied: Grisu84
Grisu84 22.09.2018 um 14:49:34 Uhr
Goto Top
Jetzt sieht der Fehler so aus (siehe Bild)
es wird in der ausgegeben Datei alles vor AAO gelöscht und alles in einer Zeile ausgegeben
fehler 2
Mitglied: 137289
137289 22.09.2018 aktualisiert um 14:54:16 Uhr
Goto Top
Nochmal kopieren. Schade das du selbst keinen Ehrgeiz das selbst zu korrigieren face-sad.

Ich bin jetzt draußen, klappt hier.
Mitglied: Grisu84
Grisu84 22.09.2018 um 17:56:01 Uhr
Goto Top
Tut mir leid, kenn mich hier in dieser Sache leider überhaupt nicht aus.
Für mich sind das spanische Dörfer.

Die Auswertung klappt super.

Leider löscht er mir alles was vor AAO steht immernoch weg
Mitglied: 137289
137289 22.09.2018 aktualisiert um 18:07:50 Uhr
Goto Top
Leider löscht er mir alles was vor AAO steht immernoch weg
Nun ja, wenn du oben schreibst
Das "AAO" und das " *ENDE DER DATEI*" soll beibehalten werden.
Genau das tut der Code oben. Glaskugeln hat hier keiner.
Mitglied: Grisu84
Grisu84 22.09.2018 um 18:39:52 Uhr
Goto Top
Im Grunde beginnt die Datei immer mit "Position". Der Bereich von hier bis einschließlich "AAO" soll geänzlich unberührt bleiben.
Mitglied: Grisu84
Grisu84 23.09.2018 um 22:44:52 Uhr
Goto Top
Hallo speedlink

ich wollte nur kurz noch vielen Dank sagen.
Die Batch-Datei funktioniert nun super.

Ohne Dich wäre ich verzweifelt.