Dateien in Verzeichnis nach Dateien mit geraden und ungeraden Zahlen im Dateinamen trennen und in Unterverzeichnis kopieren

  • Hallo,

    ich habe gerade erst mit AutoIt angefangen und stehe gerade vor einem kleinen Problem:


    Ausgangssituation:
    Ich habe mehrere Verzeichnisse mit mehreren tausend Bilddateien. Die Dateinamen enthalten alle immer eine fortlaufende Zahl, wobei es ansonsten kein festes Format gibt.
    In einem Verzeichnis gibt es z.B. Dateien mit dem Namen Main_#####.tif, also z.B. Main_00000.tif bis Main_10000.tif), im nächsten Verzeichnis sind die Dateinamen dann im Format #####main.tif, usw.

    Ziel:
    Ich würde gern die Dateien nach geraden und ungeraden Zahlen aufsplitten und diese in jeweils ein Unterverzeichnis kopieren / verschieben.


    Bisher habe ich schon mit

    Code
    _FileListToArray


    und

    Code
    StringSplit


    herumexperimentiert, allerdings war ich weniger erfolgreich.


    Vielleicht kann mir ja jemand ein bißchen helfen.


    Vielen Dank im Voraus.

    Gruß
    Gardinero

    Einmal editiert, zuletzt von Gardinero (7. Dezember 2012 um 16:58)

  • Also:
    Ich gehe mal davon aus, dass du alle Dateinamen mit _FileListToArray in ein Array übertragen hast.

    Um die Zahlen rauszufiltern, brauchst du sogenannte reguläre Ausdrücke, oder auf Englisch "Regular Expressions" (Kurz RegEx).
    Hiermit kannst du alle Zahlen aus einem String rausfiltern:

    [autoit]


    StringRegExpReplace($sString, "[^0-9]", "")

    [/autoit]

    Dann einfach weiter verarbeiten.

    lg chess

  • Hallo,

    erstmal vielen Dank für die schnelle Hilfe.
    Ich denke, dass ich das hinkriege.

    Nun habe aber noch ein Problem:
    Nachdem ich gerade und ungerade Zahlen nun in jeweils ein Array geschrieben habe, muss ich ja für den Kopierbefehl wieder die Dateinamen zusammensetzen.
    Kann ich dieses

    [autoit]

    StringRegExpReplace()

    [/autoit]

    auch auf Buchstaben anwenden, so dass ich die Teile vor und nach der Zahl in zwei Variablen zwischenspeichern kann?


    Danke.

    Gruß
    Gardinero

  • Oh, das ist nicht weiter schwer.
    Du gehst das Array wie folgt durch:

    [autoit]


    ;$aFiles enthält das Ergebnis von deinem _FileListToArray-Aufruf
    For $i = 1 To $aFiles[0]
    $iNumber = StringRegExpReplace($aFiles[$i], "[^0-9]", "")
    If Mod($iNumber, 2) Then ;Wenn die Zahl ungerade ist...
    FileCopy($aFiles[$i],"Ungerade\" & $aFiles[$i], 8)
    Else
    FileCopy($aFiles[$i],"Gerade\" & $aFiles[$i], 8)
    EndIf
    Next

    [/autoit]

    lg chess

  • Hey,

    super cool!
    Nach ein paar Pfadproblemen habe ich es nun hinbekommen.

    Ich schließe aber nicht aus, dass ich nicht noch die eine oder andere Frage hier posten werde! :D


    Vielen Dank.

    Gruß
    Gardinero