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

Printed on: April 16, 2024 at 13:04 o'clock

Mitglied: 137289
Solution 137289 Sep 22, 2018 updated at 10:44:42 (UTC)
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
Member: Grisu84
Grisu84 Sep 22, 2018 at 11:28:33 (UTC)
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 Sep 22, 2018, updated at Sep 23, 2018 at 07:33:53 (UTC)
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"  
Member: Grisu84
Grisu84 Sep 22, 2018 at 12:29:07 (UTC)
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 Sep 22, 2018 updated at 12:48:39 (UTC)
Goto Top
War nur ein "Tappfuhler".
Ist es möglich vor der ausgegebenen Zeile "Geräte" einen Zeilenumbruch zu erzwingen?
Klar, s.o.
Member: Grisu84
Grisu84 Sep 22, 2018 at 12:49:34 (UTC)
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 Sep 22, 2018 updated at 12:54:16 (UTC)
Goto Top
Nochmal kopieren. Schade das du selbst keinen Ehrgeiz das selbst zu korrigieren face-sad.

Ich bin jetzt draußen, klappt hier.
Member: Grisu84
Grisu84 Sep 22, 2018 at 15:56:01 (UTC)
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 Sep 22, 2018 updated at 16:07:50 (UTC)
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.
Member: Grisu84
Grisu84 Sep 22, 2018 at 16:39:52 (UTC)
Goto Top
Im Grunde beginnt die Datei immer mit "Position". Der Bereich von hier bis einschließlich "AAO" soll geänzlich unberührt bleiben.
Member: Grisu84
Grisu84 Sep 23, 2018 at 20:44:52 (UTC)
Goto Top
Hallo speedlink

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

Ohne Dich wäre ich verzweifelt.