FileListToArray Ordner und Dateien unterscheiden???

  • Hi Leute.

    Nach mehrmaligen vergeblichen Versuchen durch die Suche etwas passendes zu finden, wende ich mich hiermit an euch.

    Wie kann ich einen Verzeichnisinhalt einlesen und den dann abhängig davon ob in der Liste ein Ordner ist, das script einen job machen zu lassen und wenn als nächstes eine Datei folgt, einen anderen zu tun?

    Ich hoffe ich habe mich verständlich augedrückt. :rolleyes:

    Gruß, Hexpirator

  • Moin, hast du dir mal die Hilfe dazu angeschaut?

    Spoiler anzeigen


    $iFlag [optional] specifies whether to return files folders or both
    $iFlag=0(Default) Return both files and folders
    $iFlag=1 Return files only
    $iFlag=2 Return Folders only

    damit ist doch alles zu machen?
    Gruß Marvin

  • Du hast viele Möglichkeiten:

    • Mit StringInStr(FileGetAttrib([DerDateipfad]), "D") prüfen ob es ein Ordner ist.
    • _FileListToArray() erst nur Dateien zurückgeben lassen und danach nur Ordner (3.Parameter der Funktion ansehen)
    • Stattdessen mit FileFindFirstFile(), FileFindNextFile() arbeiten und das Makro @extended bei FileFindNextFile nutzen.
  • Ein kommentiertes Beispiel sagt manchmal mehr als 1000 Worte:

    FileFindFirst/Next-Beispiel
    [autoit]

    Global $SuchOrdner = @ScriptDir ; Der Pfad in dem die Dateien/Ordner durchgegangen werden sollen

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

    $h_Suchhandle = FileFindFirstFile($SuchOrdner & "\*") ; Starte die Suche im angegebenen Ordner und gebe ein Suchhandle zurück
    If $h_Suchhandle = -1 Then Exit MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen") ; Beende das Skript wenn keine Dateien/Ordner gefunden wurden

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

    Do ; Endlosschleife (da Until False immer falsch ist)
    $s_Datei = FileFindNextFile($h_Suchhandle) ; Nächsten Datei/Ordner-Namen auslesen
    If @error Then ExitLoop ; Wenn keine Dateien mehr vorhanden sind verlasse die Endlosschleife

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

    ; Wenn @extended nach einem Aufruf von FileFindNextFile = 1 dann war der Fund ein Ordner - ansonsten eine Datei - daher darauf testen
    If @extended Then ; Hier reinspringen wenn der Fund ein Ordner war
    MsgBox(0,"Ordner", "Ordner gefunden: " & $SuchOrdner & "\" & $s_Datei)
    Else ; Hier reinspringen wenn der Fund eine Datei ist:
    MsgBox(0,"Datei", "Datei gefunden: " & $SuchOrdner & "\" & $s_Datei)
    EndIf
    Until False

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

    ; Handle für Suche wieder schliessen
    FileClose($h_Suchhandle)

    [/autoit]
  • Schau dir mal das hier von BugFix an, der hat die Rekursive Dateiliste schon geschrieben ;)

    Rekursive Datei/Ordner Auflistung per Objekt

    Das ganze liefert dir ein Array zurück.
    Es gibt 2 Möglichkeiten:

    1. Du prüfst 2mal, einmal nur auf Dateien, einmal nur auf Ordner
    2. Du lässt dir beides in einem Array zurückgeben und prüfst dann mit

    [autoit]

    If Stringright($avarray[$i], 1) = "\" Then
    Ordner()
    Else
    Datei()
    EndIF

    [/autoit]