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. Die Löschung geschieht ohne Vorwarnung, und ist nicht rückgängig zu machen.

Lösung

Das geht mit der folgenden Prozedur, die in einem globalen Modul hinterlegt wird.

Argumente der Prozedur:

  • Ordnerpfad: Pfad zum Verzeichnis, in dem die Dateien gelöscht werden sollen
  • UnterordnerLoeschen (Opional): Wird dieses Argument auf True gesetzt, werden auch alle Unterverzeichnisse in diesem Verzeichnis gelöscht. Wird für dieses Argument kein Wert angegeben, wird der Standardwert (False) verwendet.
Public Sub AlleDateienLoeschen(Ordnerpfad As String, _
                               Optional UnterordnerLoeschen As Boolean)
 
   ' Ordnerpfad:           Pfad zum Verzeichnis, in dem die Dateien gelöscht werden sollen
   ' UnterordnerLoeschen:  Wenn True, werden zusätzlich auch alle Unterverzeichnisse gelöscht
 
   ' Late Binding, kein Verweis auf "Microsoft Scripting Runtime" notwendig
   ' Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Dim strDir    As String
   Dim fso       As Object   'Scripting.FileSystemObject
   Dim geloescht 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 <> vbNullString Then
 
      ' Schleife beginnen.
      Do Until strDir = vbNullString
 
         ' Initialisierung
         geloescht = False
 
         ' wenn die Unterordner auch gelöscht werden sollen
         If UnterordnerLoeschen Then
 
            ' Mit bit-weisem Vergleich sicherstellen, dass 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
                  geloescht = True
               End If
 
            End If
 
         End If
 
         ' Wenn vorher kein Verzeichnis gelöscht wurde
         If geloescht = False Then
 
            ' Mit bit-weisem Vergleich sicherstellen, dass 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:\EinVerzeichnis1\EinVerzeichnis2"
 
   Call AlleDateienLoeschen(strPfad)

Alle Dateien und Unterverzeichnisse im Verzeichnis löschen:

   Dim strPfad As String
 
   strPfad = "D:\EinVerzeichnis1\EinVerzeichnis2"
 
   Call AlleDateienLoeschen(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 alle Unterverzeichnisse werden zusammen mit eventuell darin enthaltenen Dateien unwiderruflich und ohne Rückfrage gelöscht.


Wikilinks

Weblinks