Frage zur Verwendung von _FileDeleteAfterXDays

  • Guten Morgen zusammen,
    irgendwie komme ich nicht auf einen grünen Zweig - daher die Frage hier im Forum.

    Ich habe verschiedene Maschinen/Server auf denen kontinuierlich Log Files geschrieben werden. Damit dies nicht 'Überhand' nimmt, nutze ich die Funktion _FileDeleteAfterXDays, was auch prima funktioniert.
    Um flexibler zu sein, würde ich gerne a) den Folder (in dem die zu löschenden Files liegen) und b) den Wert FileDeleteAfterXDays mittels einer ini Datei hinetrlegen (IniRead ...).
    Das Einlesen dieser Werte/Variablen funktioniert soweit auch - soll heissen ich kann die Werte $folder und $DeleteAfterDays erfolgreich abfragen (mittels a) _ArrayDisplay und b) Msgbox).
    Auch die Übergabe der Werte an die UDF funktioniert s. Msgbox.
    Leider werden aber die entsprechenden Files nicht gelöscht.
    Setzte ich anstelle der Variable $DeleteAfterDays einen Zahlenwert direkt - dann funktioniert es.

    Das verstehe ich (leider) nicht

    Wahrscheinlich ein ganz 'einfaches' Ding - aber ich sehe es nicht

    Danke schon einmal im voraus
    ugt100


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

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile_x64=c:\Temp\test\Del_GSXLogs_90days.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Date.au3>
    #include <File.au3>
    #include <Array.au3>

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

    $folder = IniRead(@ScriptDir & "\cde_test.ini", "Settings", "folder", "Key not Found")
    $dir = _FileListToArray($folder, '*.*')
    _ArrayDisplay($dir)

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

    $DeleteAfterDays = IniRead(@ScriptDir & "\cde_test.ini", "Settings", "DeleteAfterDays", "Key not Found")
    MsgBox(0,"",$DeleteAfterDays)

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

    If $dir[0] > 1 Then _FileDeleteAfterXDays($folder, $DeleteAfterDays, True) ; <---- das funktioniert nicht
    ;If $dir[0] > 1 Then _FileDeleteAfterXDays($folder, 10, True) ; <---- das funktioniert hingegen

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

    ;===============================================================================
    ; Function Name: _FileDeleteAfterXDays($sPath, $iDays[, $bForceDel][, $bRek][, $bDirDel][, $bLog])
    ; Description:: loescht Dateien in einem ausgewaehltem Verzeichnis (rekursiv)
    ; nach einer angegebenen Anzahl von Tagen
    ; Parameter(s): $sPath = Verzeichnis, aus dem die Dateien geloescht werden sollen.
    ; $iDays = Dateien, die aelter als $iDays (in Tagen) sind, loeschen.
    ; $bForceDel = wenn "True" werden auch Dateien/Verzeichnisse geloescht,
    ; die gegen das Loeschen geschuetzt sind ("R"-Attribut)
    ; $bRek = wenn "True" wird das Verzeichnis rekursiv (inkl. Unter-
    ; verzeichnisse) durchsucht.
    ; $bDirDel = wenn "True" wird das Unterverzeichnis geloescht, wenn
    ; es (aufgrund der Loeschaktion) leer ist.
    ; $bLog = wenn "True" wird das Ergebnis der Loeschaktion in die
    ; Console geschrieben.
    ; Requirement(s): AutoIt-Version min. v3.3.2.0
    ; #include <Date.au3>
    ; Return Value(s): bei Erfolg Rueckgabe = 1
    ; bei Fehler Rueckgabe = 0
    ; und @error:
    ; 1 = $iDays ist keine oder eine negative Zahl
    ; 2 = Das uebergebene 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)

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

    MsgBox(0,"",$iDays)

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

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

    Einmal editiert, zuletzt von ugt100 (22. August 2014 um 13:10)