Wenn deine Ordner, "die das Datum tragen", namentlich sinnvoll formatiert sind - soll heißen rückwärts, also z. B.
Backup_-_20091029
Backup_-_20091030
Backup_-_20091031
- dann werden sie ja bereits chronologisch alphabetisch aufgelistet.
Das ist bei Namen wie
13.01.2009
01.04.2009
02.05.2009
31.10.2009
usw. nicht der Fall.
Im zuerst genannten Fall brauchst du keine großartigen Klimmzüge zu veranstalten.
Du produzierst einfach eine alphabetisch sortierte (-> zeitlich chronologische) Auflistung deiner Ordner mit dem DIR-Befehl
Code:
dir %Zielpfad%\Backup_-_*.* /O:-N /b
Mit
Code:
dir %Zielpfad%\Backup_-_*.* /O:-D /b
kannst du die Ordner auch nach timestamp sortiert ausgeben, allerdings lehrt die Erfahrung, daß man sich auf timestamps nicht immer verlassen kann, z. B. wenn du die Ordner mal woanders hinkopierst, bekommen sie ggf. einen neuen timestamp, der nichts mehr mit dem origialen zu tun hat.
Deshalb würde ich die Variante mit dem Ordnernamen vorziehen.
Unter Verwendung einer FOR-Schleife mit dem Parameter SKIP würde ich die sortierte Ausgabe des DIR-Befehls verarbeiten.
DIR gibt die Ordnernamen zeilenweise aus.
Mit /O bestimmst du die Sortierung (order),
/b verwendet das "einfache" Format, also ohne Kopfzeilen, Dateigrüße, Dateidatum usw.
Mit SKIP kannst du deiner FOR-Schleife sagen, daß sie die ersten x übergebenen Werte (Ordnernamen) ignorieren soll.
Über die FOR-Schleife löscht man also die Ordner.
Die Liste der Ordner läßt man sich retrochronologisch (neueste zuerst) mit
DIR ... /O:-N
auflisten und weist FOR an, z. B. mittels SKIP=21 die ersten (neuesten) 21 übergebenen Ordner zu ignorieren, also nicht zu verarbeiten / zu löschen.
Damit löschst du alle Ordner außer den 21 ersten der DIR-Ausgabe, also den neuesten 21.
Wenn du für jeden Tag einen Ordner erstellst, behälst du also immer die letzten 3 Wochen.
Angenommen also du hast Ordner namens
Backup_-_20091029
Backup_-_20091030
Backup_-_20091031
Code:
echo Loesche alle Datumsordner bis auf die letzten 21...
set Ziel=D:\Sicherung
FOR /F "eol=; skip=21 tokens=* delims=," %%i in ('dir %Ziel%\Backup_*.* /O:-N /b') do (
RMDIR /S /Q %Ziel%\%%i
) Damit kommt man auch ohne jedwedes externes Tool wie "delAge" & Co aus.
Lesezeichen