Servus Zusammen,
schaue nach langer Abstinenz mal wieder hier vorbei
Ich möchte Ausgabe eines CMD-Befehls zuverlässig erfassen, im konkretten geht es dabei EXIF-Werte eines Bildes mittels des ImageMagicks Moduls zu bestimmen.
For $y = 1 To $CmdLine[0]
CmdOutputTest($CmdLine[$y])
next
Func CmdOutputTest($sPfadAusgabe)
; EXIF auslesen
$sExif = "GPSImgDirection"
$sCommand1 = 'identify -format %[exif:' & $sExif & '] "' & $sPfadAusgabe & '"'
$sOutput = CmdOutput($sCommand)
if $sWinkel = false then
; MsgBox(0, "Keine Richtungsangabe vorhanden", $sPfadAusgabe)
$iWinkel = false
else
$aOutput = StringSplit($sWinkel, "/")
if UBound($aWinkel) <> 3 then
; Fehlermeldung von CMD
_ArrayDisplay($aWinkel, $sPfadAusgabe)
MsgBox(0, "Winkel", $sWinkel)
; exit
else
$iWinkel = Round($aOutput[1] / $aOutput[2], 0)
MsgBox(0, "Winkel", $iWinkel)
endif
endif
EndFunc
Func CmdOutput($sCommand)
If StringLeft($sCommand, 1) = " " Then $sCommand = " " & $sCommand
Local $nPid = Run(@Comspec & " /c" & $sCommand, "", @SW_Hide, 8) , $sRet = ""
If @Error then Return "ERROR:" & @ERROR
ProcessWait($nPid)
While 1
$sRet &= StdoutRead($nPID)
If @error Or(Not ProcessExists($nPid) ) Then ExitLoop
WEnd
if StringInStr($sRet, "%[exif:") then Return false
if StringLen($sRet) = 0 then Return "ERROR: -leer-"
Return $sRet
EndFunc
Alles anzeigen
Der Code ist nicht schön, aber funktioniert ... zumindest meistens. Ich lasse ca. 150 Bilder im Stapel ausführen und immer hängt es bei einem Bild ... mal Bild 14, 52, 98, 143 ... ganz beliebig ohne Schema, auch wenn ich immer das selbe Bild kopiert verwende.
Irgendwie spuckt die CmdOutput Fkt. manchmal ein leeres Ergebnis aus, mal einen Fehler, das eine Datei nicht gefunden wurde, mal wird das Ergebnis vom Bild davor ausgegeben
Wie mache ich das besser und vor allem richtig? Das die Funktion immer funktioniert?
Vielen Dank