Batch-File :: Datum berechnen

Sonstiges 07 Januar, 2009

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.

Hinterlasse einen Kommentar

Du musst eingeloggt sein um einen Kommentar zu schreiben.


20353 | 20081029