Hallo,
ich bin erst gestern auf AutoIt gestossen, und habe mich dann gleich in einem kleinen Script probiert.
Ich habe mit Programmieren zwar nicht viel am Hut, aber nach ca. 10 Stunden Arbeit hab ich die Basics hinbekommen.
Soweit so gut, die Funktionen laufen, jedoch weiß ich nicht wie ich den Process Balken richtig zum laufen bekomme.
Spoiler anzeigen
Code:#include "IE.au3"
#include
#include
#include
#include
#include
#include
#include
#include
;while
;_FileListToArray($sPath[, $sFilter = "*"[, $iFlag = 0]])
;StringRegExpReplace ( "test", "pattern", "replace", [ count ] )
Opt('MustDeclareVars', 1)
Global $folderitem, $okbutton, $cancelbutton, $test, $msg
Global $sFilename = @UserProfileDir
Global $sCurFilename, $hFile, $folder, $Filelist, $progressbar, $i, $rows
_Main()
Func _Main()
GuiCreate("Shutterstock EXIF Übernahme", 400, 250)
GUICtrlCreateLabel("Geben Sie anbei den Ordner mit den zu bearbeitenden Shutterstock Bildern an. 'Exiftool.exe' muss dabei direkt im Root Verzeichnis von c: liegen. Ebenso müssen die Shutterstock Bilder einen Filenamen von shutterstock_XXX.jpg aufweisen.", 10, 30, 370, 100) ; Erste Zelle, Breite 80
$hFile = GUICtrlCreateInput($sFilename, 10, 105, 300, 20, -1, $WS_EX_STATICEDGE)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlSetTip(-1, "Drag and Drop Ordner hierher...")
$folderitem = GUICtrlCreateButton("Ordner auswählen", 10, 135, 100, 20)
$okbutton = GUICtrlCreateButton("Batch starten!", 10, 175, 80, 20)
$cancelbutton = GUICtrlCreateButton("Abbrechen", 100, 175, 70, 20)
$progressbar = GuiCtrlCreateProgress(10, 210, 380, 20)
$test = GUICtrlCreateButton("Ausgewählte Bilder anzeigen", 120, 135, 160, 20)
GUISetState()
; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
While 1
$msg = GUIGetMsg()
; Code below will check if the file is dropped (or selected)
$sCurFilename = GUICtrlRead($hFile)
If $sCurFilename <> $sFilename Then
$sFilename = $sCurFilename
EndIf
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton
Exit
Case $msg = $folderitem
$folder = FileSelectFolder("Ordner wählen...", "")
If @error Then ContinueLoop
GUICtrlSetData($hFile, $folder); GUI will be updated at next iteration
Case $msg = $test
$Filelist = _FileListToArray($sFilename, "shutterstock_*.jpg")
_ArrayDelete($Filelist, 0)
_ArrayDisplay($Filelist, 'Bilddaten')
Case $msg = $okbutton
Local $file, $oIE, $oLinks, $keywords, $oLinks2, $bildNAME, $oLinks3, $bildID, $batch
Dim $descript
$Filelist = _FileListToArray($sFilename, "shutterstock_*.jpg")
_ArrayDelete($Filelist, 0)
_ArrayTrim($Filelist, 13, 0)
_ArrayTrim($Filelist, 4, 1)
$rows = UBound($Filelist)
$i = 1
For $shutter_num In $Filelist
$i += 1
$file = "http://www.shutterstock.com/pic-" & $shutter_num & ".html"
$oIE = _IECreate($file)
$oLinks = _IETagNameGetCollection ($oIE, "a")
$keywords = ""
For $oLink In $oLinks
If $oLink.className <> "0" Then
If ($oLink.className = "middlelink") Then
$keywords = $keywords & ", " & $oLink.getAttribute("x_shutterstock_keyword")
EndIf
EndIf
Next
$oLinks2 = _IEGetObjById ($oIE, "display-pic-description")
$bildNAME = _IEPropertyGet($oLinks2, "innertext")
_IEQuit ($oIE)
$batch = 'c:exiftool -m -L -keywords="' & $keywords & '" -title="' & $bildNAME & '-' & $shutter_num &'" ' & $sFilename & '\shutterstock_' & $shutter_num & '.jpg'
Run(@ComSpec & " /c " & $batch & "")
Sleep(500)
Next
MsgBox(64, "Vorgang Beendet", "Die Bilder wurden erfolgreich bearbeitet.")
EndSelect
WEnd
EndFunc
Das Script holt sich zu den passenden Shutterstock Bildern die Keywords und Title, und speichert dies dann in den EXIF bzw. Iptc Daten des jeweiligen Bildes.
Für die Funktion muss jedoch das Exiftool.exe auf dem Ordner C: liegen.
Ich hatte mir schon gedacht, die Anzahl des Arrays "Ubound(Filelist)" durch 100 zu dividieren, und anschließend durch $i += 1 in der For Regel jeweils die jeweiligen Prozentpunkte an die Process Bar zu schicken.
Aber wie sieht es aus wenn das Array 19 Bilder beinhalten, und eine periodische Zahl rauskommt.
Wie kann man dies bewerkstelligen?