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
#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>
$folder = IniRead(@ScriptDir & "\cde_test.ini", "Settings", "folder", "Key not Found")
$dir = _FileListToArray($folder, '*.*')
_ArrayDisplay($dir)
$DeleteAfterDays = IniRead(@ScriptDir & "\cde_test.ini", "Settings", "DeleteAfterDays", "Key not Found")
MsgBox(0,"",$DeleteAfterDays)
If $dir[0] > 1 Then _FileDeleteAfterXDays($folder, $DeleteAfterDays, True) ; <---- das funktioniert nicht
;If $dir[0] > 1 Then _FileDeleteAfterXDays($folder, 10, True) ; <---- das funktioniert hingegen
;===============================================================================
; 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)
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