VBA Tipp: Alle Dateien und Unterverzeichnisse in einem Verzeichnis löschen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

  • Ich möchte alle Dateien in einem Verzeichnis löschen.
  • Wahlweise kann ich zusätzlich auch alle Unterverzeichnisse in diesem Verzeichnis löschen.
  • Die Löschung geschieht ohne Vorwarnung, und ist nicht rückgängig zu machen!

Siehe auch Dateien löschen oder in den Papierkorb verschieben

Lösung

Das geht mit der folgenden Prozedur, die in einem globalen Modul hinterlegt wird. Sie benutzt das FileSystemObject.

Public Sub AlleDateienLöschen(Ordnerpfad As String, _
           Optional UnterordnerLöschen As Boolean = False)
 
 'Löscht alle Dateien in einem lokalen Ordner
 'Wahlweise können zusätzlich auch alle Unterordner gelöscht werden
 'Late-Binding-Variante, kein Verweis notwendig
 'Quelle: http://www.dbwiki.net/
 
 Dim strDir As String
 Dim FSO As Object
 Dim Datei As Object
 Dim gelöscht As Boolean
 
 'Backslash am Ende des Pfads hinzufügen, falls er fehlt
 If Right(Ordnerpfad, 1) <> "\" Then
   Ordnerpfad = Ordnerpfad & "\"
 End If
 
 ' Objektvariable mit FileSystemObject erstellen
 Set FSO = CreateObject("Scripting.FileSystemObject")
 
 'Erste Datei oder Unterordner im Ordner suchen
 strDir = Dir(Ordnerpfad, vbNormal Or vbDirectory)
 
 'Wenn mindestens eine Datei existiert, alle Dateien löschen
 If strDir <> "" Then
 
   ' Schleife beginnen.
   Do While strDir <> ""
 
     'Initialisierung
     gelöscht = False
 
     'wenn die Unterordner auch gelöscht werden sollen
     If UnterordnerLöschen = True Then
 
       'Mit bit-weisem Vergleich sicherstellen, daß strDir ein Verzeichnis ist.
       If (GetAttr(Ordnerpfad & strDir) And vbDirectory) = vbDirectory Then
 
         'Ordner mit oder ohne Inhalt löschen, auch schreibgeschützte (außer . und ..)
         If strDir <> "." And strDir <> ".." Then
           FSO.DeleteFolder Ordnerpfad & strDir, True
           gelöscht = True
         End If
 
       End If
 
     End If
 
     'Wenn vorher kein Verzeichnis gelöscht wurde
     If gelöscht = False Then
 
       'Mit bit-weisem Vergleich sicherstellen, daß strDir kein Verzeichnis ist.
       If (GetAttr(Ordnerpfad & strDir) And vbDirectory) <> vbDirectory Then
 
         'Datei löschen, auch schreibgeschützte
         FSO.DeleteFile Ordnerpfad & strDir, True
 
       End If
 
     End If
 
     ' Nächsten Eintrag abrufen
     strDir = Dir
 
   Loop
 
 End If
 
End Sub

Aufruf

Alle Dateien im Verzeichnis löschen:

 Dim strPfad As String
 
 strPfad = "D:\MeinVerzeichnis1\MeinVerzeichnis2"
 
 Call AlleDateienLöschen(strPfad)

Alle Dateien und Unterverzeichnisse im Verzeichnis löschen:

 Dim strPfad As String
 
 strPfad = "D:\MeinVerzeichnis1\MeinVerzeichnis2"
 
 Call AlleDateienLöschen(strPfad, True)


Wiki warning.png

Achtung: Bitte die Prozedur mit größter Sorgfalt verwenden. Bei versehentlicher Wahl des falschen Verzeichnisses können gravierende Datenverluste entstehen!

Auch das Unterverzeichnis wird zusammen mit eventuell darin enthaltenen Dateien unwiderruflich und ohne Rückfrage gelöscht.


Der Code wurde in Access 2010 erstellt, ist aber auch in früheren Versionen lauffähig.

Wiki-Links