Windows 2003 Shell Scripting

Scripts zur System- und Dateiverwaltung

uniq (Duplikate entfernen)

Die Funktion dieses Scripts ist relativ einfach, aber dennoch nützlich, da Windows ein uniq-Kommando fehlt. Zuerst wird die Datei per sort mithilfe von Backquoting sortiert. Sie können natürlich auch sort direkt ohne die for-Schleife aufrufen, das Ergebnis in eine temporäre Datei schreiben und diese Datei dann per for abarbeiten.

Für jede Zeile wird in der Schleife die Ausführung an der Sprungmarke :procline fortgesetzt. Dort wird eine Umgebungsvariable (line) mit dem Inhalt der aktuellen Zeile verglichen. Solange diese übereinstimmen, haben wir ein Duplikat, und die Zeile wird nicht ausgegeben. Ist die Zeile verschieden, wird diese neue Zeile in der Variablen line gespeichert und per echo ausgegeben.

Parameter

  • %1 = Name der Datei, die sortiert ohne Duplikate ausgegeben werden soll

Code

@echo off
if !%1 == ! goto noparm
if not exist %1 goto notfound

setlocal
set line=@@@@@
for /F "usebackq tokens=*" %%f in (`sort %1`) do call
:procline "%%f"
endlocal
goto :eof

:procline
if !%line% == !%~1 goto :eof
set line=%~1
echo %~1
goto :eof

:noparm
echo Aufruf: %~f0 [datei]
echo Kein Dateiname angegeben, Abbruch.
goto :eof

:notfound
echo Die Datei %1 wurde nicht gefunden, Abbruch.
goto :eof