Hallo allerseits,
anscheinend bin ich zu blöd oder gehe von falschen Voraussetzungen aus
Ich verwende die UDF von Oscar und Micha_he namens _FileDeleteAfterXDays. Diese löscht mir tadellos alle Dateien und ev. auch Ordner, die ein gewisses Alter haben. Soweit so gut. Ich will jedoch nicht alle Dateien in einer unbestimmten Anzahl von Ordnern, sondern nur jene, mit einer bestimmten Endung (z.B. *.pdf). Habe nun schon einiges versucht bin aber immer klaglos gescheitert. Ist eine Datei mit der Endung (z.B. *.pdf) im Rootverzeichnis vorhanden, wird sie gelöscht. Alle anderen Dateien in den weiteren Unterverzeichnissen bleiben aber stehen.
Die ursprüngliche Funktion:
Spoiler anzeigen
#include <Date.au3>
#include <File.au3>
#include <Array.au3>
$Server=("C:\Temp")
$Tage=1
$Filter=("*.pdf")
_FileDeleteAfterXDays($Server,$Tage,True,True,True,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
Wäre absolut toll, wenn mir jemand helfen könnte.
lg
Merlin