Der Anwendungsfall ist schnell erklärt:
Ich habe ein Archiv (Ordnerstruktur), in dem für jeden Tag ein Ordner existiert. Dieser ist wie folgt benannt: YYYYMMDD (also z.B. 20080914). Jetzt möchte ich täglich per Batch-Datei den Tagesordner von vor 6 Monaten automatisch löschen. Heute wäre also der Order 20070707 an der Reihe…
Dafür muss ich in der Batch-Datei vom heutigen Datum 6 Monate abziehen. Und genau das lässt sich am leichtesten mit der Kombination Batch/VBScript erledigen.
Zunächst legen wir eine .vbs-Datei “DateAdd.vbs” an:
wscript.echo dateadd(Wscript.arguments.item(0),Wscript.arguments.item(1),Wscript.arguments.item(2))
Anschliessend die Batch-Datei “DeleteArchivDaily.bat”:
@echo off
for /F %%i in (‘cscript /nologo C:\Pfad\zur\DateAdd.vbs M -6 %date%’) do set DELDATE=%%i
set DELDAY=%DELDATE:~-11,2%
set DELMONTH=%DELDATE:~3,2%
set DELYEAR=%DELDATE:~6,4%
rmdir /S /Q C:\Pfad\zum\Archiv\%DELYEAR%%DELMONTH%%DELDAY%
for /F %%i in (‘cscript /nologo C:\Pfad\zur\DateAdd.vbs M -6 %date%’) do set DELDATE=%%i
Bewirkt, dass das VBScript mit den Parametern M (d = Tag, M=Monat, y = Jahr) und -6 (abzgl. 6 Monate) aufgerufen wird und die Ausgabe des Scripts in der Variablen DELDATE gespeichert wird.
set DELDAY=%DELDATE:~-11,2%
set DELMONTH=%DELDATE:~3,2%
set DELYEAR=%DELDATE:~6,4%
Der Inhalt von DELDATE wird zerlegt und in weiteren Variablen gespeichert. Die Syntax des Datumssplits habe ich im Blogeintrag Batch-Files – Totgeglaubte leben länger bereits beschrieben.
rmdir /S /Q C:\Pfad\zum\Archiv\%DELYEAR%%DELMONTH%%DELDAY%
Das ist der Löschbefehl unter Windows XP / Vista. Die Parameter /S und /Q sorgen dafür dass alle Verzeichnisse und Dateien incl. des angegeben Ordners gelöscht werden und das ganze ohne Rückfrage geschehen soll.
Letzte Kommentare