Dateien umbennenen

  • Morgen zusammen,

    ich bräuchte Hilfe bei meinem Skript.

    In einem Ordner sind mehrere *.jpg Dateien. Diese sollen automatisch verschoben werden und umbenannt werden. Der Dateiname soll aus einer Eingabe bestehen und mit einer fortlaufenden Zahl enden. Beispiel: test1.jpg, test2.jpg, test3.jpg => Bild1.jpg, Bild2.jpg, Bild3.jpg

    Ich weiß nicht wie ich das machen soll...Habe es mal mit nem Array probiert hat aber nicht geklappt....Mit Filemove kann ich die Dateien ja verschieben und umbennen. Aber nicht mehrere aufeinmal oder? Und die Anzahl der Bilder ist vor der Eingabe nicht bekannt.

    Mit einer For Schleife, und Filefindnextfile? Komme da irgendwie nicht mit klar....

    Kann mir da einer helfen???
    Wäre super!

    Viele Grüße Kevin

  • Hi!

    Hab da das Filefindnext Beispiel etwas umgeschrieben.

    Spoiler anzeigen
    [autoit]


    ; Shows the filenames of all files in the current directory
    $search = FileFindFirstFile("*.jpg") ;nur JPG werden im Ordner in dem du das Script startest gesucht eventuell einen anderen Ordner angeben oder ein Input erstellen
    $i = 1
    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $name = "c:\temp\test" & $i & ".jpg" ;Ordner und Name wohin die Bilder verschoben werden
    FileMove ( $file, $name ,9 ) ;Achtung mit der Flag 9 erstellt und überschreibt vorhandene Dateien (siehe Hilfe)
    $i = $i + 1 ;schöner $i += 1
    ;MsgBox(4096, "File:", $file) ; Zeigt dir die gefundenen Dateien an ist aber lästig ok zu drücken
    WEnd

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

    ; Close the search handle
    FileClose($search)

    [/autoit]

    If not :?: then ?( else :thumbup:

    Einmal editiert, zuletzt von Concara (19. Februar 2009 um 09:42)

    • Offizieller Beitrag

    Ich habe mal eine Version erstellt, die überprüft, ob es den Zieldateinamen bereits gibt und die eine formartierte Ausgabe des Zählers ermöglicht (4stellig mit führenden Nullen):

    Spoiler anzeigen
    [autoit]


    $sSourcePath = FileSelectFolder('Quellverzeichnis auswählen', '')
    If @error Then Exit
    If StringRight($sSourcePath, 1) <> '\' Then $sSourcePath &= '\'

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

    $sTargetPath = FileSelectFolder('Zielverzeichnis auswählen', '')
    If @error Then Exit
    If StringRight($sTargetPath, 1) <> '\' Then $sTargetPath &= '\'

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

    $sInput = InputBox('JPG-Mover', 'Neuen Dateinamen eingeben')
    If @error Then Exit

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

    $hSearch = FileFindFirstFile($sSourcePath & '*.jpg') ; Search-Handle für JPG-Dateien
    If $hSearch = -1 Then Exit MsgBox(0, 'Fehler', 'Keine JPG-Dateien gefunden')

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

    $iNr = 0 ; Zähler für den Ziel-Dateinamen
    While 1
    $sFile = FileFindNextFile($hSearch) ; finde nächste Datei mit dem Suchmuster
    If @error Then ExitLoop ; keine weitere gefunden, dann While-Schleife verlassen
    If Not StringInStr(FileGetAttrib($sSourcePath & $sFile), 'D') Then ; Wenn der gefundene String kein Verzeichnis ist, dann...
    $iNr += 1 ; Zähler um eins erhöhen
    While FileExists($sTargetPath & $sInput & StringFormat('%04s', $iNr) & '.jpg') ; falls es eine Zieldatei mit diesem Namen bereits gibt, dann...
    $iNr += 1 ; Zähler nochmal um eins erhöhen und
    WEnd ; Schleife erneut durchlaufen
    ConsoleWrite($sSourcePath & $sFile & ' -> ' & $sTargetPath & $sInput & StringFormat('%04s', $iNr) & '.jpg' & @CRLF) ; Ausgabe in die Console
    FileMove($sSourcePath & $sFile, $sTargetPath & $sInput & StringFormat('%04s', $iNr) & '.jpg') ; Datei verschieben
    EndIf
    WEnd
    ToolTip('')
    FileClose($hSearch)

    [/autoit]