Doppelte Einträge mit Batch entfernen
Hallo Leute,
bin grad dabei ein kleines Tool zu basteln und habe nun eine Frage!
Ich suche mit Hilfe von "find" nach einem Code (z.B. KUL1457) in einer CSV Datei.
Die Ausgabe schreibe ich in test.txt rein.
Die TXT Datei sieht dann so aus:
Hilfe; 125478454; ID15478455; 19.01.1956; 08:12:59; KUL1457
Mit Hilfe einer FOR Schleife suche ich mir nur ID15478455, 19.01.1956 und 08:12:59 heraus und gebe es aus.
Die FOR Schleife sieht so aus:
for /f "tokens=3-5 delims=; " %%i in (%tmp%\test.txt) do echo %i %%j %k
Nun kann es aber sein, dass in der Text Datei Einträge mit der gleichen ID vorhanden sind.
Beispiel TXT:
Hilfe; 125478454; ID15478455; 19.01.1976; 08:12:59; KUL1457
Hilfe; 125478455; ID15478455; 19.01.1999; 08:19:34; KUL1457
Hilfe; 125478456; ID15478455; 19.01.2012; 12:45:29; KUL1457
Wie kann ich es hinkriegen, dass Einträge mit der doppelten ID entfernt werden und nicht ausgegeben werden?
Dabei soll der erste Eintrag erhalten bleiben und auch ausgegeben werden.
Danke und Gruß
Kugelschreiber15
bin grad dabei ein kleines Tool zu basteln und habe nun eine Frage!
Ich suche mit Hilfe von "find" nach einem Code (z.B. KUL1457) in einer CSV Datei.
Die Ausgabe schreibe ich in test.txt rein.
Die TXT Datei sieht dann so aus:
Hilfe; 125478454; ID15478455; 19.01.1956; 08:12:59; KUL1457
Mit Hilfe einer FOR Schleife suche ich mir nur ID15478455, 19.01.1956 und 08:12:59 heraus und gebe es aus.
Die FOR Schleife sieht so aus:
for /f "tokens=3-5 delims=; " %%i in (%tmp%\test.txt) do echo %i %%j %k
Nun kann es aber sein, dass in der Text Datei Einträge mit der gleichen ID vorhanden sind.
Beispiel TXT:
Hilfe; 125478454; ID15478455; 19.01.1976; 08:12:59; KUL1457
Hilfe; 125478455; ID15478455; 19.01.1999; 08:19:34; KUL1457
Hilfe; 125478456; ID15478455; 19.01.2012; 12:45:29; KUL1457
Wie kann ich es hinkriegen, dass Einträge mit der doppelten ID entfernt werden und nicht ausgegeben werden?
Dabei soll der erste Eintrag erhalten bleiben und auch ausgegeben werden.
Danke und Gruß
Kugelschreiber15
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 265635
Url: https://administrator.de/forum/doppelte-eintraege-mit-batch-entfernen-265635.html
Ausgedruckt am: 10.04.2025 um 00:04 Uhr
8 Kommentare
Neuester Kommentar

Moin,
wenn es nur darum geht die Einträge nach dem ersten zu überspringen, einfach aus der Schleife springen:
Gruß jodel32
wenn es nur darum geht die Einträge nach dem ersten zu überspringen, einfach aus der Schleife springen:
for /f "tokens=3-5 delims=; " %%i in (%tmp%\test.txt) do echo %%i %%j %%k & goto :jump
:jump
rem hier gehts weiter
Hallo Kugelschreiber15 und willkommen im Forum!
Schematisch könnte das etwa so gehen (wenn Du weiterhin auch die "test.txt" erzeugten möchtest):
Ohne den Umweg über die "test.txt" könnte das so aussehen:
- beide Varianten sind ungetestet ...
[Edit] Nachtrag: Nur die erste Zeile der "test.txt" könntest Du mit
in eine Variable einlesen und diese dann weiter verarbeiten.
[/Edit]
Grüße
bastla
Schematisch könnte das etwa so gehen (wenn Du weiterhin auch die "test.txt" erzeugten möchtest):
@echo off & setlocal
set "Ein=%temp%\test.txt"
set "Aus=D:\Ohne_Duplikate.txt"
copy nul "%Aus%" >nul
for /f "usebackq delims=" %%i in ("%Ein%") do (
for /f "tokens=3-5 delims=; " %%a in ("%%i") do findstr "%%a" "%Aus%">nul || >>"%Aus%" echo %%i
)
@echo off & setlocal
set "Suche=KUL1457"
set "Ein=D:\Deine Datei.txt"
set "Aus=D:\Ohne_Duplikate.txt"
copy nul "%Aus%" >nul
for /f "usebackq delims=" %%i in ('findstr "%Suche%" "%Ein%"') do (
for /f "tokens=3-5 delims=; " %%a in ("%%i") do findstr "%%a" "%Aus%">nul || >>"%Aus%" echo %%i
)
[Edit] Nachtrag: Nur die erste Zeile der "test.txt" könntest Du mit
set /p Zeile=<"%temp%\test.txt"
[/Edit]
Grüße
bastla

Hallo Kugelschreiber15!
Abgesehen davon, dass ich mir nicht erklären kann, wie die Verarbeitung völlig unterschiedlicher (Ein- und Ausgabe-)Dateien in getrennten Batches andere Ergebnisse bringen sollte als bei Verwendung der kombinierten Variante, kann ich auch mit Deinem Hinweis auf den Errorlevel nichts anfangen - an welcher Stelle ermittelst Du ihn und wie wertest Du ihn aus?
Grüße
bastla
Abgesehen davon, dass ich mir nicht erklären kann, wie die Verarbeitung völlig unterschiedlicher (Ein- und Ausgabe-)Dateien in getrennten Batches andere Ergebnisse bringen sollte als bei Verwendung der kombinierten Variante, kann ich auch mit Deinem Hinweis auf den Errorlevel nichts anfangen - an welcher Stelle ermittelst Du ihn und wie wertest Du ihn aus?
Grüße
bastla