kleines Kopiertool für Fotos

  • Hallo zusammen,

    ich bräuchte ein kleines Tool, das in einem Verzeichnis nach .jpg Dateien sucht und aus dem anderen Verzeichnis die entsprechenden RAW Files dazu kopiert.

    Beim fotografieren wird z.B ein Verzeichnis angelegt

    C:\PROJEKT , dort sind .jpg und .cr2 Dateien drin.

    C:\PROJEKT AUSWAHL , da sind ausgewählte .jpg drin

    Jetzt müsste man anhand der .jpg Namen die entsprechende .cr2 Datei aus dem Projekt Ordner in den Auswahl Ordner geschoben werden.

    Ich habe das bis jetzt mit dem DOS Befehl gemacht (für alles andere bin ich noch zu doof)

    for /f "tokens=1* delims=." %i in ('dir /b "C:\TEST\PROJEKT AUSWAHL\*.jpg"') do move "C:\TEST\PROJEKT\%i.cr2" "C:\TEST\PROJEKT AUSWAHL\"

    Die 2 Verzeichnisse müssten eigentlich variabel sein, aber vielleicht bekomme ich ja selbst noch ein GUI hin.

    Hat vielleicht jemand Lust mir ein paar Tipps zu geben?

    *blondguck*

  • Hallo blondi@

    sorry, ich habe deinen Post gelesen, verstehe aber nicht, was du genau willst. Das Kopieren funktioniert für dich bereits. Nun möchtest du aber eine GUI. Worum geht's? Was soll die denn darstellen?

    Grüße autoiter

  • Hallo autoiter ,

    erstmal lieben Dank, dass Du geantwortet hast. Das mit dem Dos Befehl ist einfach umständlich. Da muss ich jedes Mal die Pfade ändern, dann ins cmd Fenster gehen (als batch läuft das aus irgendeinen Grund nicht) usw.

    Ich wollte es eigentlich selber schaffen, weil autoit schonmal relativ verständlich ist ( bin erst seit 2 Tage dabei)

    Bräuchte die Schleife für Suchen im .jpg Verzeichnis mit entsprechendem Verschieben der .cr2 Datei aus dem anderen Verzeichnis als code. Es gibt sicherlich mehrere Wege nach Rom.

    VG BL

  • Das heißt, du willst den Quellpfad immer auswählen können. Ist der Zielpfad dann auch immer Zielpfad + AUSWAHL, oder willst du den auch jedes mal auswählen?

    Grüße autoiter

  • Ich habe dir das etwas unsauber umgesetzt. Weil ich ein Fan von _FileCopyEx von Oscar bin habe ich die UDF genutzt. Wenn das für dich ein No-Go ist, dann kann man das auch einfach mit der Funktion FileCopy machen.

    Damit der Code ausführbar ist, musst du in das Verzeichnis, in dem das Skript liegt, auch die _FileCopyEx.au3 ablegen. Du kannst sie hier laden: _FileCopyEx

    Grüße autoiter

  • Hey, als Übung kannst du dir ja den Code ansehen und versuchen zu kommentieren, Der Code ist recht einfach. Wenn du das kommentieren kannst, hast du eigentlich schon programmieren gelernt.

    Grüße autoiter

  • DANKE ! Super Tip! Ich muss noch an Arrays arbeiten, da steigt mein eindimensionaler Hirn manchmal aus :D Den Rest verstehe ich gut. Ich kaue aber erstmal die Beschreibungen und Parameter durch, wenn dann noch irgendetwas unklar sein sollte, melde ich mich.

    VG BL

  • HI autoiter ,

    jetzt hast mich an der Backe :D ... Könnte man Oscar's Include Datei auch in ein _FileMoveEx ändern, wenn man nach dem schreiben der Zieldatei die Quelldatei löschen würde? Ich habe mir gerade überlegt, daß copy relativ ungünstig für mich ist, move wäre besser. Aber der Fortschrittsbalken ist auch sehr schick :)

    VG BL

  • Hallo blondi@

    Ich habe in meinem Archiv ein älteres Tool von mir gefunden, das sich relativ leicht an deine Anforderungen anpassen ließ. Einiges ist daher noch etwas rustikal gelöst, aber der Code läuft :)

    Die Dateien BlondisFilecopyV2.au3 :P und Filecopy.ini in ein Verzeichnis deiner Wahl kopieren.

    In der Filecopy.ini sind die Verzeichnisse aktuell vorbesetzt mit :

    SourceDir = "C:\Test\PROJEKT"

    DestDir = "C:\Test\PROJEKT AUSWAHL"

    (das kann man jederzeit ändern)

    Leider kann man ini.-Dateien nicht hochladen, daher hier der Code :

    Code
    ; Standardverzeichnisse - bei Bedarf ändern
    [Directories]
    SourceDir = "C:\Test\PROJEKT"
    DestDir = "C:\Test\PROJEKT AUSWAHL"

    Im Programm BlondisFilecopyV2.au3 selbst lassen sich die Verzeichnisse zudem über Suchen-Buttons auswählen oder direkt einfügen.

    Ablauf (so wolltest Du das wohl haben) :

    - es wird im Zielordner PROJEKT AUSWAHL nach *.jpg-Dateien gesucht

    - dann wird im Quellorder PROJEKT nach gleichnamigen *.cr2-Dateien gesucht

    - diese *.cr2-Dateien werden nach PROJEKT AUSWAHL kopiert

    - ob bestehende *.cr2-Dateien überschrieben werden, ist auswählbar.

    EDIT :

    Ich habe gerade deine Frage bzgl. FileMove gelesen. Das könnte man auch hier einbauen.

    Gruß Musashi

    Dateien

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (29. November 2018 um 23:58)

  • Könnte man Oscar's Include Datei auch in ein _FileMoveEx ändern, wenn man nach dem schreiben der Zieldatei die Quelldatei löschen würde?

    Der Unterschied zwischen Copie und Move ist ja eigentlich nur, dass die Datei im Anschluss gelöscht wird. Dahingehend könnte man Oscars UDF mit ganz wenigen Zeilen ändern. Ein FileDelete, ein neuer Parameter und die Anpassung vom Log und es müsste funktionieren. Was hält Oscar davon?

    Grüße autoiter

  • Mal ohne Änderung direkt in der UDF.

    Tausche mal alle Zeilen im Skript ab der Zeile mit _FileCopyEx.

    Code
        Local $sLog = _FileCopyEx($aSourceFiles, $aDestDir, 1 + 2 + 16, 'Dateien kopieren...') ; hier erfolgt dann das kopieren
        If Not @error Then
            For $i = 0 To UBound($aSourceFiles) - 1
                FileDelete($aSourceFiles[$i])
                If @error Then Exit MsgBox($MB_ICONERROR, "Fehler-Abbruch", "Quelldaten Fehler beim Löschen. FileDelete-Fehler-Wert: " & @error, 3)
            Next
        Else
            ConsoleWrite($sLog & @CR)
        EndIf
    EndFunc   ;==>_Copy

    Grüße autoiter

  • Hey Leute, autoiter , Musashi ,

    so viel Anteilnahme habe ich gar nicht erwartet. Ihr seid eine coole Truppe hier! 8)8)8)

    Ich schau mir das an, autoiter's Lösung ist klar soweit. Und wenn Oscar in seine Datei noch einen Parameter hinzu fügt, wäre auch 8)

    Was mir noch aufgefallen ist, daß Oscar sich viel Mühe gemacht hat mit den Kommentaren. Hat mir sehr weiter geholfen.

    DANKE vielmals!

  • blondi@

    Ich habe meine Variante mal erweitert !

    Du hast jetzt eine weitere Checkbox, mit der Du Dir aussuchen kannst, ob :

    - die cr2-Dateien nach dem Kopieren gelöscht werden (entpricht Filemove)

    oder

    - die cr2-Dateien nach dem Kopieren erhalten bleiben

    Gruß Musashi

  • Hallo blondi@

    nimm lieber die Variante von Musashi. Ich war gestern nicht ganz auf der Höhe, wie mir scheint. Erst habe ich Copy mit ie geschrieben und dann meinen waghalsigen Code gepostet. ^^

    So kann man es eigentlich gar nicht nutzen. Ich habe ganz vergessen, dass erst einmal im Log geschaut werden muss, ob die jeweilige Datei auch erfolgreich kopiert wurde, bevor sie im Quellverzeichnis gelöscht wird.. :rolleyes:

    Grüße autoiter

  • Hallo Musashi ,

    :klatschen:Sehr schön! Tut genau das, was es soll. Ohne Array kann es sein, dass der Code etwas länger ist, aber für mich als Anfänger besser verständlich. So mach Dir bitte keine Sorgen wegen "rustikal gelöst" *lach*

    Arrays in Schleife kommen bei mir als Step2 , habe nur noch einen dummen Kopf mit 1core Prozessor 8o, werde noch üben...

    autoiter , kann Dich sehr gut verstehen ^^ ist doch ok ;) :thumbup:

    Wünsche euch ein schönes Wochenende!

    VLG, blondi :Face:

  • Hi Musashi ,

    weisst Du eventuell, ob die FileMove Funktion in Autoit schneller ist als copy und delete? Das Problem ist die Geschwindigkeit. Wenn man das ganze auf SSD Platte macht, ist es ja kein Problem... :) Aber langsame Platte und viele Daten, dann verhungert das ganze. Beim "echten" Move werden ja nur Directory Infos geändert und nicht die Dateien dupliziert.

    VG, blondi

  • Hallo blondi@

    Auch, wenn ich nicht gefragt war. Ich würde ausschließen, dass das schneller wäre. Die Geschwindigkeit hängt von der Platte ab und davon, ob die Daten auf der selben Partition bleiben oder nicht. Egal ob SSD oder alte HDD. Wenn du nur etwa in einen Unterordner verschiebst, wird nur der Verweis geändert und es geht super flott (weil nicht die Datei verschoben wird..).

    Grüße autoiter

    Einmal editiert, zuletzt von autoiter (3. Dezember 2018 um 19:26)

  • weisst Du eventuell, ob die FileMove Funktion in Autoit schneller ist als copy und delete?

    Das habe ich bisher nicht explizit ausprobiert !

    Im Allgemeinen gilt (speziell bei langsamen Platten) :

    Wenn sehr viele (kleine) Dateien zu kopieren sind, dann dauert das wesentlich länger als EINE große Datei. Ob FileMove schneller geht, werde ich mal testen.

    Mit welcher Anzahl an Dateien hast Du denn zu tun ? (1000, 100000 ...)

    Ich werde mein Skript erweitern, damit Du beide Varianten zur Verfügung hast.

    Schaue morgen einfach mal ins Forum ;).

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."