Unterverzeichnisse auflisten

  • Hallo,

    habe bei den File & Dir Befehlen nichts passendes gefunden.

    Gibt es irgendeine Möglichkeit mir alle Unterverzeichnisse ausgeben zu lassen?
    Mit FileFindFirstFile kann ich ja nicht unterscheiden zwischen Datei und Verzeichnis, oder doch?

    Danke im voraus, Sascha

    Einmal editiert, zuletzt von Glare (21. Dezember 2009 um 14:11)

  • Seit der neuesten Final 3.3.2.0 wird der @extended Wert der Funktion FileFindNextFile() 1 wenn es sich um einen Ordner handelt.
    Vorher hat man es stattdessen halt per FileGetAttrib() gemacht.

    Hier mal ein Minimalbeispiel für die Version 3.3.2.0.:

    Spoiler anzeigen
    [autoit]

    Global $hFile, $hFind = FileFindFirstFile("\*")

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

    If $hFind <> -1 Then
    While 1
    $hFile = FileFindNextFile($hFind)
    If @error Then ExitLoop

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

    If @extended = 1 Then
    ConsoleWrite($hFile & @CRLF)
    EndIf
    WEnd
    EndIf

    [/autoit]
  • Das musste funken

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    ; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
    ; einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;===============================================================================
    #include <Array.au3>
    $dd = _RecursiveFileListToArray(@SystemDir,"*.*",0,1)

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

    _ArrayDisplay($dd)

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

    Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc

    [/autoit]

    mfg Michael