Ist dieses vorhaben umsetzbar?

  • Hallo zusammen,

    ich wollte fragen ob es möglich ist folgendes Vorhaben mit AutoIt umzusetzen. (Aufbau siehe Bild)

    Ablauf:

    erstes Bild (bmp) soll in das Programm gezogen werden, dort als jpg und mit dem jeweiligen Dateinamen abgespeichert werden (im Ordner jpg).
    Das bmp soll anschließend in den Ordner bmp verschoben werden. Dann das nächste Bild usw usw..

    Wichtig ist dass die jeweiligen Dateinamen gleich bleiben (z.B. muss 594030.bmp nachher 594030.jpg heißen)

    Die Navigation im Programm kriege ich denk ich hin, mir gehts eher um drum den jeweiligen Dateinamen (ohne Endung) auszulesen und dann nacher als Name wieder einfügen.

    Danke

    autoit.de/wcf/attachment/3844/

  • Danke schonmal euch zwei, dann weiß ich nach was ich suchen kann

    edit:

    andere Frage noch, wie kann ich dem Skript denn sagen dass er die einzelnen Dateien nacheinander nehmen soll, ich denke ich brauche dazu eine Schleife, nur weiß ich nicht wie ich nach einem schleifendurchlauf sage "so und jetzt nimm die nächste datei". in einer programmiersprache könnte man z.B. alles in ein array packen und einen zähler immer um eins weiterspringen lassen, sowas ähnliches suche ich hier

    Einmal editiert, zuletzt von kumi (4. Februar 2009 um 12:54)

  • Hallo,
    so wie es aussieht, möchtest du per Drag&Drop die Dateien auf/in dein Programm ziehen.

    Mittels des Arrays $cmdline[] ist das einfach möglich. Dabei werden die markierten und "gedroppten" Dateien ab $cmdline[1] bis $cmdline[anzahlderdateien] abgespeichert. In $cmdline[0] findet man die Anzahl der Dateien bzw. übergebenen Parameter.

    Das comilierte Autoitscript kann man einfacherweise in in die Schnellstartleiste legen, dann könntest du die markierten *BMP-Dateien dort "fallenlassen" und/oder eine Verknüpfung des Scripts im "SendTo"-Ordner anlegen. Dann kann man die Dateien markieren, rechtsklicken, im folgenden Kontextmenü "Senden an" anwählen und dort dann dein Script anwählen.

    Spoiler anzeigen
    [autoit]


    DIM $dropedfiles[100] ;es können sowieso nur maximal 60 Parameter einer datei übergeben werden

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

    if $cmdline[0]=0 then ;es ist kein Parameter(datei) übergeben worden
    msgbox(0,@scriptname,"Bitte im Windows-Explorer eine oder bis zu 60 Dateien auswählen und rechtsklicken." &@CRLF&"Im darauf folgendenden Kontextmenü bitte ""Senden an"" anwählen, dann in der folgenden Liste auf "&@ScriptName&" klicken!"&@CRLF&@CRLF&"Es ist auch möglich, eine oder mehrere Dateien auf das Programmicon zu ziehen (drag&drop).")
    $ret=filecreateshortcut(@ScriptFullPath,@UserProfileDir&"\sendto\"&@scriptname) ; Verknüpfung im SendTo-Ordner anlegen
    if $ret=0 then msgbox(0,"Fehler","Fehler beim Schreiben der Verknüpfung in den "&@userprofiledir&"\sendto\ -Ordner")
    exit
    endif

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

    $anzahldateien=$cmdline[0] ;anzahl der per drag&drop oder sendto übergebenen dateien

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

    for $i=1 to $anzahldateien ; dateinamen aus pfad extrahieren
    $location = StringInStr($cmdline[$i],"\",0,-1) ;position des letzten \ im pfad...
    $dropedfiles[$i]=StringTrimLeft($cmdline[$i],$location) ;...danach kommt der dateiname
    msgbox(0,"",$dropedfiles[$i])
    next

    [/autoit]

    Damit die Verknüpfung in den SendTo-Ordner angelegt wird oder die Hilfe angezeigt wird, einfach das Script ohne Parameter starten.

    ciao
    .Andy

  • Danke für das Beispiel, so kriege ich von allen Dateien die ich in das skript schiebe schonmal den Namen und kann mit dem arbeiten.

    Allerdings bin ich jetzt auf das problem gestoßen wie ich dem skript sage dass es jede Datei in einem festgelegten Programm öffnet (als Beispiel IrfanView). Ich habs anhand deines Beispiels mit $dropedfiles($i) versucht, da steht dann zwar immer der richtige Dateiname im öffnen Dialog allerdings wird die Datei dann nicht geöffnet obwohl ich den öffnen Dialog bestätige. Eine Idee an was das liegen kann?

  • Hallo,
    ab besten postest Du immer die nicht funktionierenden Ausschnitte deines Scripes.

    Also Irfanview soll die Datei(en) konvertieren:
    Aus der Irfanview-Hilfe: i_view32.exe c:\test.bmp /convert=c:\test.jpg
    Die Umwandlung erfolgt ohne Bildschirmausgabe!

    An Irfanview übergebene Parameter sind erstens die ursprüngliche Bilddatei($QUELLE), am besten incl. Pfad. Die liefert das Script mit $cmdline[$i].
    Zweiter Parameter ist die $ZIEL-Datei. Diese hat denselben Dateinamen wie die Quelle, allerdings in einem anderen Verzeichnis und mit einer anderen Dateiendung, du willst ja die *.BMP in eine *.JPG umwandeln. Ich gehe davon aus, dass Du mittels der Stringoperationen den Namen des Zielverzeichnisses und des Ziels (Endung soll ja JPG sein) bestimmen kannst. Wenn nicht, dann Fragen....

    Autoit startet Irfanview mittels RUNWAIT-Befeh:

    [autoit]


    Runwait(@ComSpec & " /c " & "i_view32.exe " & $QUELLE & " /convert=" & $ZIEL, "")

    [/autoit]

    Irfanview sollte dazu im Scriptverzeichnis stehen. Zum Testen solltest du nach dem Runwait ca 5 Sekunden warten, um dir ggf die Fehlermeldungen anzusehen. Wenn alles läuft, kannst du das runwait-Fenster mittels @SW_Hide unsichtbar machen.

    ciao
    .Andy

  • Ok, leider kann ich mich nicht auf das "convert" von irfanview festlegen da das skript dann evtl. auch mal für andere Datentypen/Programme angepasst werden soll. Es geht also hauptsächlich mal darum Dateien nacheinander in ein Programm zu laden und dort Änderungen vorzunehmen. Es kann also auch sein dass ich mal rtf laden muss und diese als txt speichern oder sowas in der art.
    Vielleicht ist es mit pseudocode einfacher zu erklären (anhand von bmp in jpg). Getestet hab ichs bis jetzt mit deinem oben genannten skript (ich stell nur mal die schleife mit ein zur übersicht)

    [autoit]


    $anzahldateien=$cmdline[0] ;anzahl der per drag&drop oder sendto übergebenen dateien

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

    for $i=1 to $anzahldateien ; dateinamen aus pfad extrahieren
    $location = StringInStr($cmdline[$i],"\",0,-1) ;position des letzten \ im pfad...
    $dropedfiles[$i]=StringTrimLeft($cmdline[$i],$location) ;...danach kommt der dateiname

    ;Bild1.bmp öffnen
    ;Bild1.bmp als Bild1.jgp abspeichern
    ;Bild2.bmp öffnen
    ;Bild2.bmp als Bild2.jgp abspeichern
    next

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

    FileMove(@ScriptDir & "\*.bmp", @ScriptDir & "\bmp\");
    FileMove(@ScriptDir & "\*.jpg", @ScriptDir & "\jpg\");

    [/autoit]

    Danke übrigens für deine Hilfe