Zeilen in txt mit Batchskript aussortieren
Hallo zusammen,
Ich hab ein kleines Problem und würde mich über euere Hilfe freuen.
Das Ausgangsdokument um das es geht, behinhaltet etwa folgendes:
010-070200|Lorem ipsum dolor sit amet|
010-030160|consetetur sadipscing elitr|
020-070100|sed diam nonumy eirmod tempor|
010-070200|Lorem ipsum dolor sit amet|
020-070100|invidunt ut labore et dolore magna aliquyam erat|
020-040110|Stet clita kasd gubergren|
010-070100|sed diam voluptua|
010-030160|consetetur sadipscing elitr|
Mein Wunsch ist es nun, dieses Dokument mit Hilfe einer Batchdatei zu sortieren. Und zwar sollten Zeilen,
die mit der gleichen Nummer anfangen z.B. 010-070200, aus der Datei gelöscht werden (nur die Duplikate sollen gelöscht werden).
Wichtig ist, dass am Ende die Reihenvolge der Zeilen in der sie ursprünglich in dem Dokument standen weiterhin beibehalten wird.
Das heißt, dass das Dokument nach der durchlauf der Batch folgendermaßen aussehen sollte:
010-070200|Lorem ipsum dolor sit amet|
010-030160|consetetur sadipscing elitr|
020-070100|sed diam nonumy eirmod tempor|
020-040110|Stet clita kasd gubergren|
010-070100|sed diam voluptua|
Ich hoffe mir kann jemand bei dem Problem behilflich sein!
Danke und Gruß
Magnuts
Ich hab ein kleines Problem und würde mich über euere Hilfe freuen.
Das Ausgangsdokument um das es geht, behinhaltet etwa folgendes:
010-070200|Lorem ipsum dolor sit amet|
010-030160|consetetur sadipscing elitr|
020-070100|sed diam nonumy eirmod tempor|
010-070200|Lorem ipsum dolor sit amet|
020-070100|invidunt ut labore et dolore magna aliquyam erat|
020-040110|Stet clita kasd gubergren|
010-070100|sed diam voluptua|
010-030160|consetetur sadipscing elitr|
Mein Wunsch ist es nun, dieses Dokument mit Hilfe einer Batchdatei zu sortieren. Und zwar sollten Zeilen,
die mit der gleichen Nummer anfangen z.B. 010-070200, aus der Datei gelöscht werden (nur die Duplikate sollen gelöscht werden).
Wichtig ist, dass am Ende die Reihenvolge der Zeilen in der sie ursprünglich in dem Dokument standen weiterhin beibehalten wird.
Das heißt, dass das Dokument nach der durchlauf der Batch folgendermaßen aussehen sollte:
010-070200|Lorem ipsum dolor sit amet|
010-030160|consetetur sadipscing elitr|
020-070100|sed diam nonumy eirmod tempor|
020-040110|Stet clita kasd gubergren|
010-070100|sed diam voluptua|
Ich hoffe mir kann jemand bei dem Problem behilflich sein!
Danke und Gruß
Magnuts
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146902
Url: https://administrator.de/forum/zeilen-in-txt-mit-batchskript-aussortieren-146902.html
Ausgedruckt am: 01.05.2025 um 15:05 Uhr
11 Kommentare
Neuester Kommentar

Moin,
Wenn ja - Lösung einfach
Gruß
- kennst du sort /?
- ist der Aufbau der Datei immer ???-??????|xyz?
Wenn ja - Lösung einfach
Gruß

Hallo Magnuts,
geht viel einfacher auch ohne sortieren. (wenn auch nicht sehr effizient)
Die For Schleife trennt die Eingabezeile am | und prüft vor dem Schreiben in die neue Datei ob die Zahl dort schon vorkommt.
Wenn nicht, wird die aktuelle Zeile neu zusammengebaut und geschrieben.
Das anschließend notwendige Umbenennen überlasse ich dir.
Gruß
LotPings
geht viel einfacher auch ohne sortieren. (wenn auch nicht sehr effizient)
Die For Schleife trennt die Eingabezeile am | und prüft vor dem Schreiben in die neue Datei ob die Zahl dort schon vorkommt.
Wenn nicht, wird die aktuelle Zeile neu zusammengebaut und geschrieben.
:: Magnuts.cmd ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: LotPings administrator.de 2010-07-14
@echo off & setlocal EnableDelayedExpansion
Set Dok="Ausgang.txt"
Set Neu="Neu.txt"
Type NUL > %Neu%
For /F "Usebackq Tokens=1,2 delims=|" %%A in ( %Dok%
) Do Findstr "%%A" %Neu% >NUL 2>&1 || >>%Neu% Echo.%%A^|%%B^|
Gruß
LotPings

Zitat von @77559:
Hallo Magnuts,
geht viel einfacher auch ohne sortieren. (wenn auch nicht sehr effizient)
@ lot - so einfach ist wohl nicht - die | gehören wohl zum Blindtext und nicht zur Aufgabe.Hallo Magnuts,
geht viel einfacher auch ohne sortieren. (wenn auch nicht sehr effizient)
deswegen schrub ich ja "Lösung einfach" - aber im Moment hab ich was anderes um die Ohren...
Gruß

Zitat von @60730:
@ lot - so einfach ist wohl nicht - die | gehören wohl zum Blindtext und nicht zur Aufgabe.
deswegen schrub ich ja "Lösung einfach" - aber im Moment hab ich was anderes um die Ohren...
Stimmt du hast ja senkrecht @ lot - so einfach ist wohl nicht - die | gehören wohl zum Blindtext und nicht zur Aufgabe.
deswegen schrub ich ja "Lösung einfach" - aber im Moment hab ich was anderes um die Ohren...
Am Prinzip ändert es aber nichts:
:: Magnuts2.cmd ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: LotPings administrator.de 2010-07-14
@echo off & setlocal EnableDelayedExpansion
Set Dok="Ausgang.txt"
Set Neu="Neu.txt"
Type NUL > %Neu%
For /F "Usebackq delims=" %%A in ( %Dok%
) Do Set "Line=%%A"&Findstr "!Line:~0,10!" %Neu% >NUL 2>&1 || >>%Neu% Echo.%%A
Gruß
LotPings

Hallo Magnuts,
Ich versuche das mal in eine akzeptable Form zu übersetzen:
Liebe Leute vielen Dank für Eure Mühe, ich war wohl zu
[ _] blöd , [_] dumm, [_] ungschickt, [_] unerfahren - mein Problem von Anfang an präzise zu beschreiben,
und es tut mir Leid unnötigen Aufwand verursacht zu haben.
Die Batche funktionieren so nicht,
könnt ihr mir bitte nochmal unter Berücksichtigung der erst jetzt nachgereichten Fakten eine Lösung erarbeiten?
Falls das deine Zustimmung findet lass es und wissen .. und Tschüss LotPings ( es war/ist eine heiße Woche )
Ich versuche das mal in eine akzeptable Form zu übersetzen:
Liebe Leute vielen Dank für Eure Mühe, ich war wohl zu
[ _] blöd , [_] dumm, [_] ungschickt, [_] unerfahren - mein Problem von Anfang an präzise zu beschreiben,
und es tut mir Leid unnötigen Aufwand verursacht zu haben.
Die Batche funktionieren so nicht,
könnt ihr mir bitte nochmal unter Berücksichtigung der erst jetzt nachgereichten Fakten eine Lösung erarbeiten?
Falls das deine Zustimmung findet lass es und wissen .. und Tschüss LotPings ( es war/ist eine heiße Woche )

Hallo Magnuts,
Problem bei den bisherigen Batchversionen ist, das die Pipezeichen Escaped werden müssen, bei nur 2 kann man die nachbilden. Bei mehreren muss man das per Stringersetzung machen.
Gruß
LotPings
Problem bei den bisherigen Batchversionen ist, das die Pipezeichen Escaped werden müssen, bei nur 2 kann man die nachbilden. Bei mehreren muss man das per Stringersetzung machen.
:: Magnuts3.cmd ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: LotPings administrator.de 2010-07-16
@echo off & Setlocal EnableDelayedExpansion
set Prompt=$G
Set Dok="Ausgang.txt"
Set Neu="Neu.txt"
Type NUL > %Neu%
For /F "Usebackq delims=" %%A in ( %Dok%
) Do Set "Line=%%A"&Findstr "!Line:~0,10!" %Neu% >NUL 2>&1 || CAll :LineOut
Goto :eof
:LineOut
Set "Line=%Line:|=^|%"
>>%Neu% Echo.%Line%
Gruß
LotPings

Hallo Magnuts,
so schön es ist, wenn ein Thema erledgt abgehakt werden kann, noch besser wäre es,
wenn du beschreibst was und wie dir Deine Lösung gelungen ist - Ratsuchende können es dann vielleicht auch nachvollziehen.
Gruß
LotPings
so schön es ist, wenn ein Thema erledgt abgehakt werden kann, noch besser wäre es,
wenn du beschreibst was und wie dir Deine Lösung gelungen ist - Ratsuchende können es dann vielleicht auch nachvollziehen.
Gruß
LotPings