Hallo
Ich habe angefangen ein Script zu schreiben, das alle Dateien in einem Ordner und in dessen Unterordnern löschen soll, die älter als 7 Tage sind.
Das funktioniert auch so weit ganz gut, allerdings lässt das Script leere Ordner zurück und bricht komplett ab, wenn ein Ordner bereits leer ist.
Wie kann ich erreichen, das das Skript bei leeren Ordnern nicht abbricht, sondern nur die aktuelle Funktion verlässt ?
Wie kann ich meine Löschfunktion so umfunktionieren, das sie leere Ordner mit entfernt ? Ich habe die Funktion kopiert und anders benannt (deleteemtpydirectories), aber ich weiß nicht, ob eine zweite Funktion dafür überhaupt nötig ist.
Spoiler anzeigen
Func schaltjahr ($jahr)
If (Mod($jahr, 4) = 0) Then
If (Mod($jahr, 100) = 0) Then
If (Mod($jahr, 400) = 0) Then
Return 1
Else
Return 0
EndIf
Else
Return 1
EndIf
EndIf
EndFunc
Func tagedesmonats ($month, $jahr)
Switch $month
Case 1
Return 31
Case 2
If schaltjahr($jahr) Then
Return 29
EndIf
Return 28
Case 3
Return 31
Case 4
Return 30
Case 5
Return 31
Case 6
Return 30
Case 7
Return 31
Case 8
Return 31
Case 9
Return 30
Case 10
Return 31
Case 11
Return 30
Case 12
Return 31
EndSwitch
EndFunc
Func deleteold ($filename, $days)
$zeit = FileGetTime ( $filename )
If ($zeit[0] = @YEAR) Then
;Datei ist aus diesem Jahr
If $zeit[1] = @MON Then
;Datei ist aus diesem Monat
If $zeit[2] = @MDAY Then
;Datei ist von Heute
ElseIf (@MDAY - $zeit[2]) >= $days Then
;Datei ist älter/gleichalt als sieben Tage, also löschen
Return 1
EndIf
ElseIf $zeit[1] < @MON Then
;Monatszahl in Datei ist kleiner als aktuelle Monatszahl
;Prüfen ob Datei von letztem Monat ist
If ((@MON - $zeit[1]) = 1) Then
$alterintagen = (tagedesmonats($zeit[1],@YEAR) - $zeit[2]) + @MDAY
If $alterintagen >= $days Then
return 1
Else
Return 0
EndIf
ElseIf ((@MON - $zeit[1]) > 1) Then
;Datei ist älter als ein Monat, also Löschen
Return 1
EndIf
EndIf
ElseIf $zeit[0] < @YEAR Then
If ((@YEAR - $zeit[0]) = 1) Then
If @MON Then
If ($zeit[1] = 12) Then
$alterintagen = (31 - $zeit[2]) + @MDAY
If $alterintagen >= $days Then
return 1
Else
Return 0
EndIf
EndIf
EndIf
ElseIf ((@YEAR - $zeit[0]) > 1) Then
;Datei ist älter als ein Jahr
EndIf
Return 1
EndIf
Return 0
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]#cs
Func deleteemtpydirectories ($pfad)
$search = FileFindFirstFile($pfad & "\*")
; Prüfen, ob die Suche erfolgreich war
If $search = -1 Then
;MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
Exit
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
If @extended Then
;Wenn @extended gleich 1 ist, ist die "datei" ein Ordner, also ruft die Funktion sich selbst mit dem Ordner Pfad auf.
deleteloop ($pfad & "\" & $file)
Else
;@extended gleich 0, also Alter Prüfen
If (deleteold($pfad & "\" & $file, 7)) = 1 Then
;MsgBox ( 0 , "" , "datei '" & $file & "' wird gelöscht" , "" , "")
FileDelete($pfad & "\" & $file)
Else
;MsgBox ( 0 , "" , "datei '" & $file &"' wird nicht gelöscht" , "" , "")
EndIf
EndIf
EndIf
WEnd
; Handle für Suche schliessen
FileClose($search)
EndFunc
#ce
Func deleteloop ($pfad)
$search = FileFindFirstFile($pfad & "\*")
; Prüfen, ob die Suche erfolgreich war
If $search = -1 Then
MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
;Hier bricht das ganze Script ab.
Exit
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
If @extended Then
;Wenn @extended gleich 1 ist, ist die "datei" ein Ordner, also ruft die Funktion sich selbst mit dem Ordner Pfad auf.
deleteloop ($pfad & "\" & $file)
Else
;@extended gleich 0, also Alter Prüfen
If (deleteold($pfad & "\" & $file, 7)) = 1 Then
;MsgBox ( 0 , "" , "datei '" & $file & "' wird gelöscht" , "" , "")
FileDelete($pfad & "\" & $file)
Else
;MsgBox ( 0 , "" , "datei '" & $file &"' wird nicht gelöscht" , "" , "")
EndIf
EndIf
EndIf
WEnd
; Handle für Suche schliessen
FileClose($search)
EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]deleteloop ("D:\testordner")
[/autoit]Ich habe übrigens ziemlich viel aus der AutoIT Dokumentation geklaut, die ist echt gut.