Verzeichnis rekursiv durchsuchen und Dateien bzw. Unterverzeichnisse abhängig vom Alter löschen

12/12/2007 - 20:05 von Drizz Urden | Report spam
Hallo,

ich möchte rekursiv eine Verzeichnisstruktur (z. B. c:\test) durchsuchen
lassen und alle Dateien, die àlter als z. B. 10 Tagen sind löschen.
Außerdem sollen Unterverzeichnisse wenn Sie danach leer sind ebenfalls
gelöscht werden.

Das Durchsuchen des Verzeichnisse rekursiv und ermitteln der Dateien,
die àlter als 10 Tage sind scheint zu funktionieren (auch das löschen).

Das löschen von leeren Ordnern ist aber falsch gelöst. Z. B. habe ich
getestet das in einer Ordnerstruktur c:\test\1\1.1\1.1.1 (wobei in allen
Zahlordnern keine Dateien enthalten sind er die 1 zu löschen anstatt
erst die 1.1.1.

Habe mir teile dieses Codes aus einem Buch von Holger Schwichtenberg
genommen und angepasst und die hinzugefügte Funktion stammt aus dem
Internet.

Bin im Scripten sicherlich ein absoluter Newbie, vielleicht kann mir ja
jemand helfen?

Vielen Dank im Voraus

Gruß

Andreas


Option Explicit
'Aufruf der Routine
'Konstanten definieren
Const Verzeichnisbezeichner="c:\test"
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim intLoesch, strLoeschVerzeichnis

'Funktion prüft ob ein Ordner leer ist
Function FolderEmpty (strFolderPathName)
Dim oFiles, oFile, oFolder, oSubfolders, oSubfolder
Dim blnFileFound : blnFileFound = False
Set oFolder = oFS.GetFolder(strFolderPathname)
Set oFiles = oFolder.Files
If oFiles.Count > 0 Then
FolderEmpty = False
Exit Function
End If
Set oSubFolders = oFolder.SubFolders
for Each oSubFolder In oSubFolders
If Not FolderEmpty(oSubFolder.Path) Then
FolderEmpty = False
Exit Function
End If
Next
FolderEmpty = True

End Function


ListeVerzeichnisseRek VerzeichnisBezeichner

Sub ListeVerzeichnisseRek(Verzeichnisname)
'Deklaration der Variablen
Dim objFSO, objFSO2, strVerzeichnis, strUnterVerzeichnis, strDatei, intDiffadate
'Object erzeugen
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Wenn das Verzeichnis existiert
if objFSO.FolderExists(Verzeichnisname) then

'Ordner holen
Set strVerzeichnis = objFSO.GetFolder(Verzeichnisname)
'Prüfen ob das Verzeichnis leer ist
if FolderEmpty(strVerzeichnis) = True then
strLoeschVerzeichnis = strVerzeichnis
intLoesch = 1
else
' Alle Dateien im Verzeichnis anzeigen
For Each strDatei in strVerzeichnis.Files

' Ermittle ob die Datei àlter ist als 10 Tage
intDiffadate = DateDiff("d", strDatei.DateCreated,Now)

If intDiffadate > 17 Then
strDatei.delete
End if
Next
'FolderEmpty(strVerzeichnis)
if FolderEmpty(strVerzeichnis) = True then
intLoesch = 1
end if
end If

'Loesche das vorherige Verzeichnis wenn das Flag int_Loesch auf 1 steht'
if intLoesch = 1 then
strLoeschVerzeichnis
'objFSO.DeleteFolder(strLoeschVerzeichnis)
objFSO.FolderDelete(strLoeschVerzeichnis)
intLoesch = 0
end if

'Prüfe ob das aktuelle Verzeichnis jetzt leer ist
if FolderEmpty(strVerzeichnis) = True then
strLoeschVerzeichnis = strVerzeichnis
intLoesch = 1
End If
'Alle Unterverzeichnisse auflisten
for each strUnterVerzeichnis in strVerzeichnis.subfolders
'Erneueter Aufruf mit dem Unterverzeichnis
ListeVerzeichnisseRek strUnterVerzeichnis
next

end if

End Sub
 

Lesen sie die antworten

#1 ekkehard.horner
12/12/2007 - 21:53 | Warnen spam
Drizz Urden schrieb:
Hallo,

ich möchte rekursiv eine Verzeichnisstruktur (z. B. c:\test) durchsuchen
lassen und alle Dateien, die àlter als z. B. 10 Tagen sind löschen.
Außerdem sollen Unterverzeichnisse wenn Sie danach leer sind ebenfalls
gelöscht werden.


[...]
Vielleicht hilft ein Blick auf das Thema "Deleting Empty Folders Recursively"
in microsoft.public.scripting.vbscript (28. Nov)

http://groups.google.de/group/micro...936d0bade6

Ähnliche fragen