Ordner suchen

  • Hiho.

    ich suche eine möglichkeit, im scriptdir alle möglichen ordner nacheinander zu suchen und ausgeben zu lassen.

    mit FileFindFirstFile und FileFindNextFile geht es bedingt, da natürlich auch alle dateien angezeigt werden.

    gibts da ne möglichkeit ?

    PS: grad auf _dirsearch gestoßen, nur suche ich jetzt noch die udf =)
    PPS: leider kann es noch nicht das was ich brauche ... es soll alle ordner, aber NUR im scriptdir nacheinander ausgaben ... gucken ob ich das noch hinbekomme

  • Etwas schneller geht es wenn du die _DirSearch-Funktion entsprechend anpasst (Prinzipiell muss nur der Parameter "/s" aus dem Aufruf verschwinden.):

    Spoiler anzeigen
    [autoit]

    $Array = _ListDirs("C:\Windows")
    If @error Then Exit

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

    For $i = 1 To $Array[0]
    ConsoleWrite($Array[$i] & @CRLF)
    Next

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

    Func _ListDirs($Pfad)
    Local $Text, $PID
    If Not FileExists($Pfad) Then Return SetError(1, 1, 0)
    $PID = Run(@ComSpec & " /c DIR /A:D /B", $Pfad, @SW_HIDE, 2)
    Do
    $Text &= StdoutRead($PID)
    If @error Then ExitLoop
    Until 0
    Return StringSplit(StringStripCR(StringTrimRight($Text, 1)), @LF)
    EndFunc

    [/autoit]

    Edit:

    Muss mich korrigieren.
    Die Funktion ist nur schneller wenn in dem Verzeichnis sehr viele Dateien und Verzeichnisse vorhanden sind - ansonsten sieht es eher andersrum aus.
    Hab mal noch eine Funktion gebastelt welche nun besser laufen sollte:

    Spoiler anzeigen
    [autoit]

    Func _ListDirs($Pfad)
    Local $obj = ObjCreate('Scripting.FileSystemObject')
    If @error Then Return SetError(1,1,0)
    Local $pth, $e

    If StringRight($Pfad, 1) = '\' Then $Pfad = StringTrimRight($Pfad, 1)

    $pth = $obj.GetFolder($Pfad & '\').SubFolders

    Local $Array[$pth.count + 1]

    For $e in $pth
    $Array[0] += 1
    $Array[$Array[0]] = $e.Name
    Next
    Return $Array
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von AspirinJunkie (10. November 2007 um 00:17)