Daten auslesen und vergleichen nur auf Verzeichnisstruktur (keine Files auslesen)

  • Hallo Leute,

    ich komme mal wieder mit einer Anfrage zum realisieren einer Problematik und hoffe auf input von euch.

    Es geht in diesem Fall um den Vergleich wieviele Daten in einem Monat (mit abfrage welcher Monat ist und dann nur nach diesem sucht) vorhanden sind. --> Ausgabe Anzahl + Vergleich der Dateien (heissen komplett gleich nur die Endung ist anders)

    Dies ist muss in drei Ordnern getestet werden (.xml/.log/.pdf Dateien)

    Die soll in eine txt Datei gespeichert werden mit Angaben Datum dem Ordner und Anzahl Dateien und wo Unterschiede bestehen.

    !Wichtig! der Script wird vermutlich sehr langsam sein da in diesen Verzeichnissen sich über 200'000 Files befinden.

    Ich freue mich au eure Antworten.

    Grüsse Ru642

  • Die Platzierung ist schon korrekt. Bin leider etwas eingerostet.
    Die Frage ist eher wie ich dies Realisieren kann.
    Beispiele von Funktionen die sich verwenden lassen können.
    Bin parallel dazu auch am schauen wie ich das machen kann.

  • Dann halt einen Ansatz:

    In verschiedenen Ordnern Dateien, gefiltert nach Monat/Dateityp, finden
    [autoit]

    Global $a_Folders[] = ["D:\Temp", "D:"] ; Alle Ordner in denen gesucht werden soll
    Global $s_FileExtensions = "txt|xml|dic|au3" ; Alle zu findenden Dateitypen

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

    ; Den eingrenzenden Monat angeben:
    Global $d_Month = @Mon
    Global $d_Year = @YEAR

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

    Global Const $s_FileExtPattern = "(?i)\.(?:" & $s_FileExtensions & ")$" ; Hilfsvariable welche aus $s_FileExtensions ein RegEx-Pattern macht

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

    ; Alle Pfade in $a_Folders durchgehen
    For $s_RootPath In $a_Folders
    ; Alle Dateien im aktuellen Ordner $s_RootPath durchgehen:
    $h_FFFF = FileFindFirstFile($s_RootPath & "\*.*") ; Startet die Dateisuche
    If Not @error Then
    Do
    $s_File = FileFindNextFile($h_FFFF)
    If @error Then ExitLoop ; Falls keine Datei mehr gefunden wurde
    If @extended Then ContinueLoop ; Falls Fund ein Ordner statt einer Datei
    If Not StringRegExp($s_File, $s_FileExtPattern) Then ContinueLoop ; Falls keine der angegebenen Dateiendungen

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

    ; Zeit der Datei feststellen (hier: Änderungsdatum/Zeit)
    $a_FileTime = FileGetTime($s_RootPath & '\' & $s_File)
    If @error Then ContinueLoop
    If Not ($a_FileTime[0] = $d_Year And $a_FileTime[1] = $d_Month) Then ContinueLoop ; Falls Datei nicht aus aktuellem Monat / Jahr

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

    ConsoleWrite($s_RootPath & "" & $s_File & @CRLF)
    Until 0
    EndIf
    FileClose($h_FFFF)
    Next

    [/autoit]

    4 Mal editiert, zuletzt von AspirinJunkie (30. Juli 2014 um 14:20) aus folgendem Grund: Fehler behoben, Probleme im Forum mit Backslash

  • Vielen Dank für deinen Ansatz aber ich krige bei der ersten Zeile schon einen Syntax Error.

    - ERROR: syntax error Global $a_Folders[]

    Spoiler anzeigen
    [autoit]

    Global $a_Folders[] = ["C:\temp\test\1","C:\temp\test\2","C:\temp\test\3"] ; Alle Ordner in denen gesucht werden soll
    Global $s_FileExtensions = "txt|xml|log" ; Alle zu findenden Dateitypen

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

    ; Den eingrenzenden Monat angeben:
    Global $d_Month = @Mon
    Global $d_Year = @YEAR

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

    Global Const $s_FileExtPattern = "(?i)\.(?:" & $s_FileExtensions & ")$" ; Hilfsvariable welche aus $s_FileExtensions ein RegEx-Pattern macht

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

    ; Alle Pfade in $a_Folders durchgehen
    For $s_RootPath In $a_Folders
    ; Alle Dateien im aktuellen Ordner $s_RootPath durchgehen:
    $h_FFFF = FileFindFirstFile($s_RootPath & "\*.*") ; Startet die Dateisuche
    If Not @error Then
    Do
    $s_File = FileFindNextFile($h_FFFF)
    If @error Then ExitLoop ; Falls keine Datei mehr gefunden wurde
    If @extended Then ContinueLoop ; Falls Fund ein Ordner statt einer Datei
    If Not StringRegExp($s_File, $s_FileExtPattern) Then ContinueLoop ; Falls keine der angegebenen Dateiendungen

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

    ; Zeit der Datei feststellen (hier: Änderungsdatum/Zeit)
    $a_FileTime = FileGetTime($s_File)
    If @error Then ContinueLoop
    If Not ($a_FileTime[0] = $d_Year And $a_FileTime[1] = $d_Month) Then ContinueLoop ; Falls Datei nicht aus aktuellem Monat / Jahr

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

    ConsoleWrite($s_RootPath & "" & $s_File & @CRLF)
    Until 0
    EndIf
    FileClose($h_FFFF)
    Next

    [/autoit]

    Was mache ich hier noch falsch? Habe mir hierzu noch 3 Test Ordner eingerichtet und Test Files erstellt.