- Offizieller Beitrag
_FileDeleteAfterXDays
Diese Funktion löscht Dateien, die älter sind als die angegebene Anzahl an Tagen. Das anzugebene Verzeichnis kann auch rekursiv (inkl. Unterverzeichnisse) durchsucht werden.
Spoiler anzeigen
#include <Date.au3>
_FileDeleteAfterXDays('c:\Temp\', 10, True)
;===============================================================================
; Function Name: _FileDeleteAfterXDays($sPath, $iDays[, $bForceDel][, $bRek][, $bDirDel][, $bLog])
; Description:: löscht Dateien in einem ausgewähltem Verzeichnis (rekursiv)
; nach einer angegebenen Anzahl von Tagen
; Parameter(s): $sPath = Verzeichnis, aus dem die Dateien gelöscht werden sollen.
; $iDays = Dateien, die älter als $iDays (in Tagen) sind, löschen.
; $bForceDel = wenn "True" werden auch Dateien/Verzeichnisse gelöscht,
; die gegen löschen geschützt sind ("R"-Attribut)
; $bRek = wenn "True" wird das Verzeichnis rekursiv (inkl. Unter-
; verzeichnisse) durchsucht.
; $bDirDel = wenn "True" wird das Unterverzeichnis gelöscht, wenn
; es (aufgrund der Löschaktion) leer ist.
; $bLog = wenn "True" wird das Ergebnis der Löschaktion in die
; Console geschrieben.
; Requirement(s): AutoIt-Version min. v3.3.2.0
; #include <Date.au3>
; Return Value(s): bei Erfolg Rückgabe = 1
; bei Fehler Rückgabe = 0
; und @error:
; 1 = $iDays ist keine oder eine negative Zahl
; 2 = Das übergebene Verzeichnis existiert nicht oder ist leer.
; Author(s): Oscar (http://www.autoit.de)
; Micha_he (http://www.autoit.de)
;===============================================================================
Func _FileDeleteAfterXDays($sPath, $iDays, $bForceDel = False, $bRek = True, $bDirDel = True, $bLog = True)
Local $hSearchm, $hEmpty, $sFile, $sDate, $iRet
If (Not IsNumber($iDays)) Or ($iDays < 0) Then Return SetError(1, 0, 0)
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$hSearch = FileFindFirstFile($sPath & '*.*')
If @error Then Return SetError(2, 0, 0)
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If @extended Then
If $bRek Then
_FileDeleteAfterXDays($sPath & $sFile, $iDays, $bForceDel, $bRek, $bDirDel, $bLog)
If $bDirDel Then
$hEmpty = FileFindFirstFile($sPath & $sFile & '\*.*')
If @error Then
If $bForceDel Then FileSetAttrib($sPath & $sFile, '-R')
$iRet = DirRemove($sPath & $sFile)
If $bLog Then ConsoleWrite('Delete Folder "' & $sPath & $sFile & '" = ' & StringMid('No Yes', $iRet * 3 + 1, 3) & @CR)
EndIf
FileClose($hEmpty)
EndIf
EndIf
Else
$sDate = StringRegExpReplace(FileGetTime($sPath & $sFile, 0, 1), '(\d{4})(\d{2})(\d{2})(.*)', '$1/$2/$3')
If _DateDiff('D', $sDate, _NowCalc()) > $iDays Then
If $bForceDel Then FileSetAttrib($sPath & $sFile, '-R')
$iRet = FileDelete($sPath & $sFile)
If $bLog Then ConsoleWrite('Delete File "' & $sPath & $sFile & '" = ' & StringMid('No Yes', $iRet * 3 + 1, 3) & @CR)
EndIf
EndIf
WEnd
FileClose($hSearch)
Return 1
EndFunc