gegeben sei eine Festplatte X, auf der ein oder mehrere "Hauptordner" ("Fälle") sind.
In diesen Hauptordnern gibt es mehrere Unterordner, in denen wieder Unterordner stecken (können - gern 5 oder 8 Ebenen). Jedoch befindet sich in der ersten Unterebene ein (Unter)Ordner, der NUR Dateien enthält (keine weiteren Unterordner). Diese Dateien haben den Dateityp "*.e01" (die Ziffern können fortlaufend weiter gehen, aber die "01" existiert mind. 1x).
Gibt es nur einen Fall, kann es auch sein, dass dieser "Unterordner" direkt auf der obersten Festplatten-Ebene auch liegt (mit weiteren Ordnern, die Unterordner enthalten).
Nun sollen alle Dateien mit dem Format "*.e01" ausgelesen werden und aufgelistet.
Dazu habe ich auf eine Funktion "Tree" aus dem Netz zugegriffen, die alle Unterordner in jeder Ebene rekursiv durchsucht.
Das .. dauert aber natürlich und ist nicht notwendig.
Ich hätte gern, dass das Programm (entweder auf oberster Ebene, wenn nur ein Fall ist) den Ordner mit den Dateien findet, ausliest und beendet. Oder - wenn meherere "Fälle" (Hauptordner) sind, das er in jeden Hauptordner geht, den Ordner findet, wo die Dateien drin sind, die ausliest, aber ... die anderen Unterordner ignoriert sondern gleich eben wieder in die oberste Ebene geht um den nächsten "Fall" (Hauptordner) zu durchsuchen.
Irgendwie fehlt mir da aber der Gedanke, wie ich das hinbekomme, dass, wenn er eben diesen einen Ordner gefunden hat, dann "zurück" springt und den Rest ignoriert.
Es würde auch reichen, wenn ich in einem Ordner KEINE "*.e01"-Dateien finde und sage "wenn im Ordner keine sind, dann such auch nicht weiter in den Unterordnern IN diesem Ordner" - außer, ich hab eben, dass ich in der obersten Ebene mehrere Fall-Ordner habe.
Hat jemand irgendeinen klugen Gedanken für mich wie ich das umsetzen kann?
Sub Tree(ByVal objFolder As Object, ByVal objFSO As Object, Ebene As Single, schalter As Boolean)
Dim objSubFolder As Object
On Error Resume Next
Dim Datei As Variant
Dim Typ As String
Dim gefunden As Boolean
Dim Ordner As String
'Lesen Dateien auf der Ebene
For Each Datei In objFolder.Files
Application.StatusBar = "Aktueller Ordner: " & objFolder
Debug.Print "Aktuelle Ebene: " & Ebene
Debug.Print "Dateien finden: ..."
Debug.Print "Ordner: " & objFolder
Debug.Print " "
Typ = LCase(objFSO.getExtensionName(Datei))
If Left(Typ, 1) = "e" And IsNumeric(Right(Typ, 2)) Then
Call Liste_schreiben(Datei, objFolder) 'füllt ein Array, was hinterher weiter verarbeitet wird
End If
Next
'Lesen der UNTERebene
For Each objSubFolder In objFolder.subfolders
Debug.Print "Aktuelle Ebene: " & Ebene
Debug.Print "Unterebene: " & objSubFolder
Debug.Print " "
Application.StatusBar = "Aktueller Ordner: " & objSubFolder
If InStr(1, objSubFolder, "RECYCLE") = 0 Then Call Tree(objSubFolder, objFSO, Ebene + 1, schalter)
Next
End Sub
aufgerufen wird es im Hauptprogramm mit
Pfad = Pfad_Wählen("Verzeichnis der *.e01-Dateien") 'weiteres Unterprogramm, was ein Menü zum Pfad auswählen aufruft
Set objFSO = CreateObject("scripting.filesystemobject")
Set objFolder = objFSO.GetFolder(Pfad)
Call Tree(objFolder, objFSO, 1, False) '1 = Ebene, False = schalter
Set objFolder = Nothing
Set objFSO = Nothing
mit dem Schalter wollte ich das irgendwie eben hinbekommen, dass der dann "zurück springt" wenn Dateien gefunden wurden.Tobi@s