Wenn Sie automatisiert Dateien löschen möchten, die ein gewisses Alter erreicht haben, stellt die Batch eine kleine Hürde dar. Nicht dass es nicht möglich ist, doch der Aufwand steht in keinem Verhältnis. Schnell werden Sie versuchen, sich in VB (Skript) mit dem Problem zu beschäftigen.
Die Handhabung eines Datum bedeutet nach wie vor erheblichen Aufwand. Schön, dass es da schon etwas gibt. Ein weiteres Tool von Microsoft nämlich, welches es umsonst gibt und einem die Arbeit extrem erleichtert, ist „forfiles.exe“. Es ist kostenlos erhältlich und meines Wissens ab Windows Server 2003 auch standardmäßig in der Installation vorhanden. Auf jeden Fall ist Forfiles im „w2k reskit“ enthalten.
-> Download forfiles.exe direkt von Microsoft
Prüfung, ob „forfiles“ vorhanden ist
Gehen Sie auf Start/Ausführen und geben Sie „cmd“ ein. In der DOS-Box geben Sie „forfiles“ ein. öffnet sich die Beschreibung von „forfiles“, ist es auf Ihrem System vorhanden. Erscheint eine Meldung, dass Ihr Befehl falsch geschrieben sei, so müssen Sie die Datei auf Ihr System kopieren. Laden Sie sich als erstes „forfiles.exe“ aus dem Netz. Entpacken Sie die ZIP-Datei und kopieren die Datei „forfiles.exe“ am Besten in den Ordner „Windows/System32“. Dort haben Sie ständig Zugriff auf diese Datei.
Befehlssyntax:
Syntax für NT/ Windows 2000/SP:
FORFILES [-pPath] [-s] [-dDate] [-mMask] [-cCommand]
Syntax für Windows 2003/Vista/Win8 (2012):
FORFILES [/P Path] [/S] [/D Date] [/M Mask] [/C Command]
key
Path: Pfad für die Suche (default=current folder)
-s: Rekursives Suchen in Unter-Ordner
Date: Kann sein
+DDMMYY zum Selektieren von Dateien die neuer sind als (filedate >=DDMMYY)
-DDMMYY zum Selektieren von Dateien die älter sind als (filedate <=DDMMYY)
+DD zum Selektieren von Dateien die neuer sind als „DD“-Tage
-DD zum Selektieren von Dateien die älter sind als „DD“-Tage
Mask: Suchmaske (wildcards allowed) default=*.*
Command: Command zum Ausführen einer Datei. default=“CMD /C Echo @FILE“
Die folgenden Variablen können benutzt werden mit -cCommand (Großschreibung beachten)
@FILE,
@FNAME_WITHOUT_EXT,
@EXT,
@PATH,
@RELPATH,
@ISDIR,
@FSIZE,
@FDATE,
@FTIME
Beispiele:
FORFILES -pC: -s -m*.TXT -c“CMD /C Echo @FILE
Dieser Befehl listet Ihnen alle „.txt“-Files in Ihrem C-Laufwerk auf.
FORFILES -pC: -s -m*.HTML -c“CMD /C Echo @RELPATH ist der Ordner von @FILE“
Dieser Befehl zeigt Ihnen die Ordner der TXT-Dateien auf dem C-Laufwerk
FORFILES -pC: -s -m*. -c“CMD /C if @ISDIR==TRUE echo @FILE ist ein Ordner“
Zeigt alle Ordner im C-Laufwerk an
FORFILES -pc: -s -m*.* -d-100 -c“CMD /C Echo @FILE : Datum >= 100 Tage“
Zeigt alle Dateien im C-Laufwerk, die größer/gleich 100 Tage alt sind
FORFILES -pc: -s -m*.* -d-010195 -c“CMD /C Echo @FILE ist älter als 01011995!“
Zeigt alle Dateien im C-Laufwerk, älter größer/gleich als das angegebene Datum sind
Jetzt zu unserem Problem. Listen wir einmal alle Dateien im Verzeichnis „C:test“ auf, die älter als fünf Tage sind: „FORFILES -pC:test -d-5“ liefert uns das Ergebnis. Sichern wir das Skript ein wenig ab, in dem wir eine Suchmaske mit übergeben. Fügen Sie dem Befehl „-m*.rtf“ hinzu. Nun listet der Befehl nur die rtf-Dateien auf, die älter als fünf Tage sind. Wenn Sie automatisiert Daten löschen wollen und die Daten immer dem gleichen Typ entsprechen, kann dies Ihrem Skript mehr Sicherheit geben.
So, nun fügen wir den Befehl hinzu, um Daten zu löschen. Wie oben ersichtlich kann mit „-c“ ein Command mit übergeben werden. ACHTUNG: Ab jetzt löschen wir Dateien!
Fügen Sie Ihrem Befehl -c“CMD /C del @FILE“ hinzu. Zum Testen können Sie „del“ durch „echo“ ersetzen. Der vollständige Befehl lautet nun: „FORFILES -pC:test -d-5 -m*.rtf -c“CMD /C del @FILE“
Diesen Befehl können Sie nun auch in einem Skript oder direkt automatisiert in einem Schedule-Task ausführen.
ANMERKUNG:
Je nach Version von forfiles können die Parameter anders aufgerufen werden. Evtl. heißt der Syntax: FORFILES /P D:test /D -5 /M *.rtf /C „CMD /C DEL @FILE“
UPDATE 2013:
Einige Parameter habe ich angepasst, da der Editor auch einige Backslashes verschluckt hat. Ich bitte um Entschuldigung.
Eine weitere Anwendung des FORFILES-Befehls gibt es im Artikel „Batch: Anzahl Dateien im Ordner und löschen“
UPDATE 2020:
Auch unter Windows 10 funktioniert Forefiles. Nach vielen Jahren habe ich den Befehl wieder benötigt und erfolgreich ausgeführt (-d -5: Dateien, die älter als 5 Tage sind):
FORFILES -p „E:PFAD“ -m *.* -d -5 -c „cmd /c del @path“
Hallo
Nette gute Anleitungen. Jedoch bin ich auf ein Problem gestossen welches ich auch nach einiger Zeit mit Google nicht lösen konnte.
Folgendes dürfte Bekannt sein:
@echo off
REM **************************************************
REM *** Skript löscht Dateien aus einem Ordern, die älter als x Tage sind.
REM *** http://sirmark.de/computer/dateien-automatisiert-loeschen-die-aelter-als-x-tagedatum-sind-191.html
REM ***
REM *** Anpassung 2013: Es wird zuerst geprüft,
REM *** ob noch mindestens X (minFiles) Dateien vorhanden sind.
REM *** Wenn Mindestanzahl an Dateien NICHT vorhanden sind
REM *** (beispielsweise weil ein Sync/Upload nicht mehr funktioniert),
REM *** löscht das Skript KEINE Daten mehr.
REM
REM ### VARIABLEN ###
REM minFiles = 5 : Anzahl an Dateien, die mindestens im Verzeichnis liegen müssen
REM sicherungsverz=C: (…) : sicherungsverz zum Ordner, der überwacht werden soll
REM -> Lokaler sicherungsverz (cmd liegt im Verzeichnis) : sicherungsverz=%~1
REM AlterTage: (min) Tage, wie alt die zu löschenden Dateien sein sollen
REM Laufwerksbuchstabe: Da Forfiles keine UNC-sicherungsverze beherrscht, wird dieser Laufwerksbuchstabe gemappt
REM countFiles : Interne Zählvariable
REM **************************************************
setlocal
SET minFiles=3
REM Forefiles kann NICHT mit UNC-sicherungsverzen umgehen
REM Hier wird ein Laufwerksbuchstabe aus dem UNC-sicherungsverz mit NET USE gemappt
REM und nach dem FORFILES Befehl wieder gelöscht
SET Laufwerksbuchstabe=C:tempvmbackup
SET AlterTage=1
SET countFiles=0
REM Prüfe, wieviel Dateien im Ordner vorhanden sind
if (%sicherungsverz%)==() set sicherungsverz=%~dp0
set first=%sicherungsverz:~0,1%
set last=%sicherungsverz:~-1%
if not (%first%)==(^“) set sicherungsverz=^“%sicherungsverz%
if not (%last%)==(^“) set sicherungsverz=%sicherungsverz%“
for /F %%i in (‚dir %sicherungsverz% /B /A-d‘) do set /A countFiles=countFiles+1
REM Ausgabe der Daten
echo %countFiles% Dateien in sicherungsverz – Min: %minFiles%
REM Prüfung auf Mindestanzahl an Dateien
if %countFiles% GTR %minFiles% (
REM Genug Files vorhanden, lösch die Dateien
echo Loesche …
REM Achtung: Unterschiedliche Versionen von Forfiles -p != /P -> genaue Syntax lokal mit /? ermitteln!
REM Test – Files nur anzeigen: forfiles -p%sicherungsverz% -d-%AlterTage% -c“CMD /C echo @FILE“
REM UNSCHARF: Zeigt nur die Files an. Zum Löschen das folgende echo in del ändern: „CMD /C del @FILE“
forfiles /p %Laufwerksbuchstabe% /D -%AlterTage% /c „cmd /c del @FILE“
) ELSE (
echo Zuwenig Dateien zum Löschen!
)
endlocal
Klappt bis auf eine entscheidende Sache 1A.
Leider behält es mir keine Daten, wenn das Datum darüber ist.
Mit „SET minFiles=3“
lege ich ja fest, dass es mir mind. 3 Dateien auf keinen Umständen löschen darf?
Wäre nice wenn wer das Problem finden kann.
Danke & Gruss
Patrick