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