Dateien nach einer bestimmten Anzahl an Tagen löschen (Funktion)

    • 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
    [autoit]


    #include <Date.au3>
    _FileDeleteAfterXDays('c:\Temp\', 10, True)

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; 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

    [/autoit]
  • Hallo Oscar,

    würde dein Script gerne einsetzen, allerdings möchte ich beim Start die Werte für $sPath und $iDays übergeben.
    Dazu habe ich folgendes eingefügt. Es funktioniert leider nicht.

    Spoiler anzeigen

    $par0 = $CmdLine[0]
    $sPath = $CmdLine[1]
    $iDays = $CmdLine[2]

    If $par0 < 2 Then
    Exit
    EndIf


    _FileDeleteAfterXDays($sPath, $iDays, True)

    Kannst Du mir sagen woran es liegen?

    Danke, Gruß Jam

    Einmal editiert, zuletzt von Jam (13. Januar 2011 um 08:22)

    • Offizieller Beitrag

    @ Jam, ist zwar ungetestet aber sollte so gehen:

    [autoit]

    If $Cmdline[0] Then
    $sPath = $Cmdline[1]
    $iDays = $Cmdline[2]
    If $Cmdline[0] < 2 Then Exit
    Else
    Exit
    EndIf
    _FileDeleteAfterXDays($sPath, $iDays, True)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]