exiftool .bat Datei per Excel VBA ausgeführt liefert keine Daten

wk64

Ensign
Registriert
Mai 2025
Beiträge
130
Hallo,

mit folgender .bat Datei extrahiere ich mit dem exiftool IPTC-Daten aus Bilddateien:

"exiftool.exe -csv F:\00_Entwickelte_Bilder\Kategorien -r > F:\20_IPTC-Daten_auslesen\ExifTool\TMP.csv"

Wenn ich dies nun über ein VBA-Script in Excel ausführen will wird zwar die TMP.csv Datei erstellt,
sie beinhaltet aber keine Daten.

Woran könnte das liegen?

Danke und Gruß, wk64
 
Du hast keine exiftool.exe auf dem Rechner?

VBA Script in Excel führt eine .exe-Datei aus? Wild!
 
? Natürlich habe ich das exiftool auf dem Rechner, sonst würde die .bat Datei ja keine Daten liefern.
 
Ich würde drauf tippen, dass die Umleitung ">" durch die Art und Weise wie VBA den Aufruf macht nicht richtig funktioniert.

Versuch vielleicht mal sowas in der Art:

Code:
cmd /c exiftool.exe -csv ""F:\00_Entwickelte_Bilder\Kategorien"" -r > ""F:\20_IPTC-Daten_auslesen\ExifTool\TMP.csv""
 
Jetzt habe ich es mal direkt über den VBA Code probiert - also nicht über den Umweg der .bat Datei:

Shell ("""F:\20_IPTC-Daten_auslesen\ExifTool\exiftool.exe -csv ""F:\00_Entwickelte_Bilder\Kategorien"" -r > ""F:\20_IPTC-Daten_auslesen\ExifTool\TMP.csv""")

Aber das geht gar nicht...

Habe ich da irgendwo falsche " ??
 
Zuletzt bearbeitet:
Wie siehts damit aus?

Code:
Call Shell("cmd /c ""F:\20_IPTC-Daten_auslesen\ExifTool\exiftool.exe"" -csv ""F:\00_Entwickelte_Bilder\Kategorien"" -r > ""F:\20_IPTC-Daten_auslesen\ExifTool\TMP.csv""")
 
da passiert nix - zwar keine Fehlermeldung aber es passiert auch nix - also es wird keine Datei erstellt.
 
Wenn eine Batch-Datei mit SHELL gestartet wird, dann ist in der Laufzeit der Batch-Datei der aktuelle Pfad = Das Dokumente-Verzeichnis in Windows, i. d. R. = C:\Users\DeinBenutzername\Documents.
Wenn "exiftool.exe" nicht im Dokumente-Verzeichnis oder in einem Verzeichnis liegt, der in der PATH-Variable hinterlegt ist, dann scheitert die Batch daran, dass "exiftool.exe" nicht gefunden wird und es wird eine leere CSV-Datei erzeugt.

Du musst innerhalb der Batch-Datei erst in der Verzeichnis wechseln, wo die "exiftool.exe" liegt.
Das geht z. B. mit CD /D "C:\Pfad\von\exiftool" oder PUSHD "C:\Pfad\von\exiftool".
Und danach dann deinen exiftool-Befehl ausführen.

Du kannst auch ohne vorherigen Verzeichnis-Wechsel arbeiten. Du musst dann nur exiftool.exe inkl. kompletten Pfad ausführen:
"C:\Pfad\zu\exiftool\exiftool.exe" -csv F:\00_Entwickelte_Bilder\Kategorien -r > F:\20_IPTC-Daten_auslesen\ExifTool\TMP.csv

---------------------

Wenn du exiftool.exe ohne Batch-Datei ausführen möchtest, dann lautet der SHELL-Befehl:

Shell "cmd /c """"C:\Pfad\von\exiftool\exiftool.exe"" -csv ""F:\00_Entwickelte_Bilder\Kategorien"" -r > ""F:\20_IPTC-Daten_auslesen\ExifTool\TMP.csv"""""

Man könnte sich ein paar "-Zeichen sparen, wenn alle Pfade keine Leerzeichen enthalten. Aber so ist der Befehl universeller einsetzbar.

---------------------

Noch ein kleiner Hinweis:
Der Shell-Befehl arbeitet asynchron zu VBA, d. h. der VBA-Code pausiert nicht, während der Shell-Befehl läuft. Das musst du im VBA-Code berücksichtigen, falls noch nicht geschehen.
 
Zuletzt bearbeitet:
Der VBA-Code stopp nicht bei der Ausführung vom SHELL-Befehl.
Wenn du nach dem SHELL-Befehl die CSV-Datei per VBA verarbeitest, der SHELL-Befehl (die Batch-Datei) aber noch läuft, dann wirst du keine oder nur unvollständige Daten in der CSV-Datei haben.
 
Ich werde es dir jetzt nicht detailliert vorkauen.
Ein mögliche Umsetzung von mir wäre, dass du in der Batch-Datei eine zweite Datei erzeugst. Und per VBA prüfst du in festen Zeitintervallen, ob die Datei vorhanden ist: Wenn ja, erst dann läuft der VBA-Code weiter.
 
Tja, tolle Idee, aber die Datei ist ja immer da und wird erst bei Neuausführung des Codes "überschrieben"
Am einfachsten währe das einbauen einer Pause - aber weiss ich wie lange das braucht?
 
Du sollst nicht auf die Ergebnisdatei prüfrn, sondern auf eine zweite Lock-Datei. Die erstellst du vor dem Aufruf von exiftool und löschst die wieder weg wenn Exiftool fertig ist.
Der Löschbefehl muss mit in den Shell Aufruf des Exiftools.

Dann kannst du im VBA sowas machen wie "solange Lock-Datei da: warten".
 
  • Gefällt mir
Reaktionen: Darkman.X
Zurück
Oben