Moin Gemeinde.
Ich habe mir ein kleines Tool gebastelt, was mit hilfe von ImageMagick und Exiftool große Mengen bilder in einem Ordner sortiert, verkleinert und so ...
Dabei ergibt sich ein Problem - wenn ich mit $cmd = Run(@ComSpec & " /c " & $ExifToolPath & " -CreateDate " & $FolderSrcSort & $pic, @ScriptDir, @SW_HIDE, 2) einen Exiftool-Befehl auf ein Bild starte, um das Erstellungsdatum herauszubekommen, so dauert das je nach Bildgröße eine Weile. Das anschließende StdOutRead bringt dann unter Umständen einen leeren Wert zurück, die Bilder werden dann in einen Ordner namens ohne_Datum kopiert.
Das Problem tritt erst auf, seit ich eine Progressbar mitlaufen lasse. Hier mal der Code der entsprechenden Funktion:
Spoiler anzeigen
Func GetCreateDate($pic,$ExifToolPath,$FolderSrcSort)
$ExifCmd = Run(@ComSpec & " /c " & $ExifToolPath & " -CreateDate " & $FolderSrcSort & $pic, @ScriptDir, @SW_HIDE, 2)
Sleep (750)
$CreateDate = StdoutRead ($ExifCmd)
$CreateDate = StringTrimLeft($CreateDate,34)
$CreateDate = StringTrimRight($CreateDate,14)
$CreateYear = StringTrimRight($CreateDate,3)
$CreateMonth = StringTrimLeft($CreateDate,5)
If $CreateDate <> "" Then
$DestFolder = $CreateYear & "_" & $CreateMonth
Else
$DestFolder = "_ohne_datum"
EndIf
$CreateFolder = $FolderSrcSort & $DestFolder
If Not FileExists ($CreateFolder & "\*") Then DirCreate ($CreateFolder & "\")
Return $CreateFolder
EndFunc
und der Aufruf der Progressbar-Sache:
Spoiler anzeigen
Func PicSort ()
$FolderSrcSort = IniRead (@ScriptDir & "\tmp.ini", "PathToFiles", "SrcDir", "")
If $FolderSrcSort = "" Then
MsgBox (64, "Fehler", "Kein Ordner mit Bildern gewählt!")
Return
EndIf
$ExifToolPath = IniRead (@ScriptDir & "\config.ini", "PATH", "Exiftool","")
[/autoit] [autoit][/autoit] [autoit]$file = FileFindFirstFile ($FolderSrcSort & GUICtrlRead($ExtensionSort))
If $file = -1 Then
MsgBox (0, "Info", "Keine JPG-Dateien im Ordner " & $FolderSrcSort & " gefunden.")
Exit
EndIf
$i=0
$progressStep = 100/$countProgress
$bar=0
While 1
$pic = FileFindNextFile ($file)
If @error Then ExitLoop
GetCreateDate($pic,$ExifToolPath,$FolderSrcSort)
[/autoit] [autoit][/autoit] [autoit]FileCopy ($FolderSrcSort & $pic, $CreateFolder & "\",1)
$i=$i+1
$bar +=$progressStep
ProgressCount($bar)
WEnd
$quest = MsgBox (36, "Operation abgeschlossen", "Es wurden " & $i & " Bilder einsortiert." & @LF & "Wollen Sie weitere Bilder bearbeiten?")
If $quest = 7 Then Exit
EndFunc
Func GetProgressCount($FolderSrc,$Extension)
;MsgBox (64, "Debug1", $FolderSrc & @LF & $Extension)
$file = FileFindFirstFile ($FolderSrc & $Extension)
$countProgress = 0
While 1
$Pic = FileFindNextFile($file)
If @error Then ExitLoop
$countProgress = $countProgress+1
WEnd
;MsgBox (64, "Debug1", $countProgress)
IniWrite (@ScriptDir & "\tmp.ini", "PathToFiles", "SrcDir", $FolderSrc)
Return $countProgress
EndFunc
Func ProgressCount($count)
GUICtrlSetData($pBar, $count)
EndFunc
Das komplette Script hängt am Post dran.
autoit.de/wcf/attachment/2491/
Meine AutoitVersion idt 3.2.12.1 und bei ScitTE4Autoit nutze ich die aktuelle Version vom Download hier.
Danke fürs Nachdenken
Greets Markus