Alle Ordner und / oder Dateien in einem Ordner

  • Hallöchen,
    bei einem post hier im Forum ist mir die Idee gekommen, eine Funktion zu schreiben,
    welche alle Dateien und Unterordner in einem bestimmten Ordner auflistet.

    Hier also die Funktion

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    ;===============================================================================
    ;
    ; Function Name: _Listall
    ; Description:: List all Files und Subdirs from given path (Currently a maximum of 8 subfolders deep)
    ; Parameter(s): $Path = Path to search in
    ; $Dironly = Only look for DirNames
    ; $Search = part of a Filename to search for
    ; $Firstfound = Only return first filename matching $Search
    ; Requirement(s):
    ; Return Value(s): An 2-dimensional Array when looking for Files
    ; - $return[0][0] count of Files or Matches
    ; - $return[$i][0] Folder
    ; - $return[$i][1] Filename
    ; An 1-dimensional Array when looking for Folders
    ; - $Return[0] count of Folders
    ;
    ; Author(s): TheLuBu <[email='LuBu@veytal.com'][/email]>
    ;
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _Listall($Path, $Dironly = FALSE, $Search = FALSE, $Firstfound = FALSE)
    $Timer = TimerInit()
    Local $Alldat[1500000][2]
    Local $Alldir[1500000]
    $Alldir[1] = ""
    $dirrow = 1
    $Ordner = _FileListToArray($Path, "*", 2)
    If IsArray($Ordner) Then
    For $i = 1 To $Ordner[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i]
    $SubOrdner1 = _FileListToArray($Path & "\" & $Ordner[$i], "*", 2)
    If Not IsArray($SubOrdner1) Then ContinueLoop
    For $j = 1 To $SubOrdner1[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i] & "\" & $SubOrdner1[$j]
    $SubOrdner2 = _FileListToArray($Path & "\" & $Ordner[$i] & "\" & $SubOrdner1[$j], "*", 2)
    If Not IsArray($SubOrdner2) Then ContinueLoop
    For $k = 1 To $SubOrdner2[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k]
    $SubOrdner3 = _FileListToArray($Path & "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k], "*", 2)
    If Not IsArray($SubOrdner3) Then ContinueLoop
    For $l = 1 To $SubOrdner3[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l]
    $SubOrdner4 = _FileListToArray($Path & "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l], "*", 2)
    If Not IsArray($SubOrdner4) Then ContinueLoop
    For $m = 1 To $SubOrdner4[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m]
    $SubOrdner5 = _FileListToArray($Path & "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m], "*", 2)
    If Not IsArray($SubOrdner5) Then ContinueLoop
    For $n = 1 To $SubOrdner5[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m] & "\" & $SubOrdner5[$n]
    $SubOrdner6 = _FileListToArray($Path & "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m] & "\" & $SubOrdner5[$n], "*", 2)
    If Not IsArray($SubOrdner6) Then ContinueLoop
    For $o = 1 To $SubOrdner6[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m] & "\" & $SubOrdner5[$n] & "\" & $SubOrdner6[$o]
    $SubOrdner7 = _FileListToArray($Path & "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m] & "\" & $SubOrdner5[$n] & "\" & $SubOrdner6[$o], "*", 2)
    If Not IsArray($SubOrdner7) Then ContinueLoop
    For $p = 1 To $SubOrdner7[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m] & "\" & $SubOrdner5[$n] & "\" & $SubOrdner6[$o] & "\" & $SubOrdner7[$p]
    $SubOrdner8 = _FileListToArray($Path & "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m] & "\" & $SubOrdner5[$n] & "\" & $SubOrdner6[$o] & "\" & $SubOrdner7[$p], "*", 2)
    If Not IsArray($SubOrdner8) Then ContinueLoop
    For $q = 1 To $SubOrdner8[0]
    $dirrow += 1
    $Alldir[$dirrow] = "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m] & "\" & $SubOrdner5[$n] & "\" & $SubOrdner6[$o] & "\" & $SubOrdner7[$p] & "\" & $SubOrdner8[$q]
    ;~ $SubOrdner9 = _FileListToArray($Path & "\" & $Ordner[$i] & "\" & $SubOrdner1[$j] & "\" & $SubOrdner2[$k] & "\" & $SubOrdner3[$l] & "\" & $SubOrdner4[$m] & "\" & $SubOrdner5[$n] & "\" & $SubOrdner6[$o]& "\" & $SubOrdner7[$p]& "\" & $SubOrdner8[$q], "*", 2)
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    EndIf
    ReDim $Alldir[$dirrow + 1]
    $Alldir[0] = UBound($Alldir) - 1
    If Not $Dironly = FALSE Then Return $Alldir
    $row = 0
    For $i = 1 To $Alldir[0]
    $Dats = _FileListToArray($Path & $Alldir[$i], "*", 1)
    If Not IsArray($Dats) Then ContinueLoop
    For $k = 1 To $Dats[0]
    If Not $Search = FALSE Then
    If Stringinstr($Dats[$k], $Search, 2) <> 0 Then
    $row += 1
    $Alldat[$row][0] = $Path & $Alldir[$i]
    $Alldat[$row][1] = $Dats[$k]
    If $Firstfound = TRUE Then Exitloop(2)
    ConsoleWrite($Path & $Alldir[$i]&"\"& $Dats[$k] & @CRLF )
    EndIf
    Else
    $row += 1
    $Alldat[$row][0] = $Path & $Alldir[$i]
    $Alldat[$row][1] = $Dats[$k]
    EndIf
    Next
    Next
    ReDim $Alldat[$row + 1][2]
    $Alldat[0][0] = UBound($Alldat) - 1
    $Diff = TimerDiff($Timer)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Diff = ' & $Diff / 1000 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Return $Alldat
    EndFunc

    [/autoit]

    Derzeit durchsucht er den Ordner plus maximal 8 unterordner nach Dateien. Es kann nach bestimmten Dateien gesucht werden, oder auch nur alle Ordner aufgelistet werden.

    Über Rückmeldungen würde ich mich freuen ;)