Batch-File :: Datum berechnen

Sonstiges Kein Kommentar »

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.


20361 | 20081029