Dateien und Ordner zählen

  • Hallo,

    wie ist es möglich, Dateien und Ordner in einem bestimmten Verzeichnis (immer der Dokumente-Ordner eines jeden PCs - Benutzerunabhängig) zu zählen und in eine Variable zu schreiben, die dann später genutzt wird?

    Danke im Voraus
    ~P1xel

  • Okay, also ich hab es jetzt so gelöst:


    Nur irgendwie werden mir da viel zu große Zahlen ausgegeben? Der Dokumente-Ordner hat demnach 857 Dateien und 312 Ordner O.o

    Wenn ich einen Ordner im Dokumente Ordner beispielsweise auswähle, dann zeigt er es mir richtig an.

    Gibt es so viele versteckte Dateien? Oder geht der Befehl die Unterverzeichnisse auch noch durch (was ich nicht will!)?

    3 Mal editiert, zuletzt von P1xelfehler (15. Oktober 2015 um 10:50)

  • Wenn du das nicht willst:


    Angepasst aus der Hilfe-Datei.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Er sucht prinzipiell Dateien in einem Ordner. Das wird einmal Initialisiert "FileFindFirstFile" und dann die Dateien nach und nach ausgegeben "FileFindNextFile" bis er keine Datei mehr findet "@error".

    Auch Ordner sind für Windows erst einmal Dateien. Unterscheiden tun die sich eigentlich nur durch ein File-Attribut: Directory. Directory ist das, was in Foren häufig einfach Folder genannt wird. AutoIt liest über die Funktion "FileGetAttrib" die Attribute einer Datei ein. Besitzt es dabei das Attribut "D" (=Directory) ist es ein Ordner. Das Beispiel oben hat genau zwei Variablen: Eine für Ordner eine für Dateien, und prüft: Ist das nach Attributen ein Ordner? Wenn ja, zähle bei Ordnern um eins hoch, ansonsten bei Dateien. :)

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Könnte man. Es macht aber kaum einen Unterschied, außer, dass diese Makros - genau wie binäre Flags - für Neulinge deutlich schwieriger verständlich sind.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Du meinst If StringInStr(FileGetAttrib($sMyFolder & $sFileName), "D") Then ist verständlicher als If @extended Then?

    Erfahrungsgemäß: Definitiv. Das eine versteht praktisch jeder, weil es was zu verstehen hat, das andere nicht, weil es immer was anderes bedeuten kann (nämlich bei jeder Funktion), direkt nach der Funktion abgefragt werden muss, und zudem noch nicht mal ersichtlich ist, was es eigentlich tut.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Code von oben mit einer 3 statt 1:

    Mit diesen [1] und [2] geht es nicht, da kommt ein Fehler.

    Ohne diese kommt am Ende raus: "-1 Dateien und -1 Ordner. Also insgesamt -2 Elemente." - also Fehler -1.

    EDIT: Hab nicht alles kopiert, geht doch...

    Und das ist deutlich einfacher als die andere Möglichkeit!

    2 Mal editiert, zuletzt von P1xelfehler (15. Oktober 2015 um 12:58)

  • also Fehler -1.

    Fehler -1 bedeutet (Siehe Hilfe), dass der angegebene Pfad nicht existiert.
    Wenn es tatsächlich so sein sollte, dass der Pfad konstant bleibt und nur eine Veränderung des Flags von 1 auf 3 diesen Fehler verursacht müssten wir versuchen ein Beispiel zu finden welches dieses Verhalten bei anderen auch reproduziert.
    Denn dann wäre es ein Bugmeldung an die AutoIt-Devs wert.

    Da ich es aber selbst nicht reproduzieren kann bitte ich dich die Ausgabe folgenden Skriptes zu posten:

    AutoIt
    $aDirInfo = DirGetSize (@MyDocumentsDir, 1)
    ConsoleWrite(StringFormat("%5d Dateien + %5d Ordner = %5d gesamt\n", $aDirInfo[1], $aDirInfo[2], $aDirInfo[1] + $aDirInfo[2]))
    
    
    $aDirInfo = DirGetSize (@MyDocumentsDir, 3)
    ConsoleWrite(StringFormat("%5d Dateien + %5d Ordner = %5d gesamt\n", $aDirInfo[1], $aDirInfo[2], $aDirInfo[1] + $aDirInfo[2]))