• Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2025
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien und Schutzgläser der Eigenmarken
    "Upscreen", "Screenleaf", BROTECT" und "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Stimmt ab über die Sieger des DSLR-Forum Fotowettbewerbs Juli 2025.
    Thema: "Unscharf"

    Nur noch bis zum 31.07.2025 23:59!
    Jeder darf abstimmen!
    Zur Abstimmung und Bewertung hier lang
  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
WERBUNG

Exiftool Kommandozeilen-Problem

epp4

Themenersteller
Hi,
darf ich mal eine Frage an die Exiftool-Spezialisten stellen.

Ich bin soweit gut mit dem Programm zurecht gekommen. Exif-Daten kopieren, ändern etc. ging alles glatt.

Jetzt hänge ich aber beim Auflisten der Daten in einem Textfile.
Es geht um folgende Syntax:

exiftool -EXIF:all Pfadname > out.txt

Direkt von der Dos-Shell aufgerufen funktioniert es einwandfrei.
Wenn ich das Kommando aber über spawnvp aus meinem Programm starten will, so wie alle anderen, die bisher funktionierten, dann bekomme ich immer dieselbe Fehlermeldung:
"out.txt File not found"
Die Daten werden aber brav im aufpoppenden Dos-Window durchgescrollt.

Ich habe mich schon rumgespielt, Quotes gesetzt etc., komme aber auf keine Lösung. Weder über eine zusammenhängende Optionsübergabe, noch über -@ argfile. Letztere Lösung wäre mir am liebsten. Der Pfadname kann ganz schön lang werden, wenn man das Ausgabefile auch noch in mit komplettem Pfad angeben will, kann es mit der max. Kommandozeilenlänge eng werden.

Beim argfile hatte ich es zunächst so probiert:
-EXIF:all
Pfadname
>
out.txt

Es kommt aber immer die selbe Fehlermeldung mit File out.txt not found.

Bin für jeden Tipp dankbar!
Erwin
 
Einen Schritt oder besser gesagt eine Erkenntnis bin ich zwischenzeitlich weiter. Ich habe folgenden Hinweis im Netz gefunden:

The output to file is handled by the shell, and piping like this can't be done from inside the argfile. You have to do it outside. If you are in Windows, you can create a .bat file to do it:
exiftool -@ argfile > g:\nik\list_r.txt


Das Problem dabei ist, dass es nach dem Herausnehmen der Pipe mit dem Ausgabefilenamen aus dem argfile immer noch nicht geht.

Ich befürchte fast, dass mir der Aufruf spawnvp einen Strich durch die Rechnung macht und die übergebene Argumentenliste hier nicht getrennt gehalten wird, wie bei einem Batchaufruf.
Bleiben wohl 2 Lösungsmöglichkeiten:
- Eventuell hilft ein anderer spawn weiter, muss mal die Hilfe des Compilers bemühen.
- Man arbeitet mit einem zwischengelagerten Batchfile, dem man mit %1 den Ausgabenamen übergibt.

Ich bin aber nach wie vor daran interessiert, wenn jemand bereits eine lauffähige Lösung aus dem C-Programm heraus hat.

Erwin
 
Ich bin aber nach wie vor daran interessiert, wenn jemand bereits eine lauffähige Lösung aus dem C-Programm heraus hat.
Sorry, ich hab nur eine reichlich unspezifische Antwort: Du musst vor dem spawnvp den Standard-Output (stdout) auf die gewünschte Datei umleiten, d.h. diese Datei öffnen (out.txt) und stdout auf deren FILE-Handle umschwenken. Frag mich jetzt aber nicht, wie man das konkret macht. Irgendwann in fernster Vergangenheit habe ich das mal hinbekommen ;)

Aber vielleicht hilft es Dir ja weiter und Du kannst den Rest ergoogeln.

Nachtrag: freopen heißt das Zauberwort.

P.S. Ich glaube der Hinweis aus dem Netz, den Du erwähnt hast, meint etwas anderes: Man soll einfach das Kommando, das man absetzen will, in eine Batch-Datei schreiben, also wortwörtlich Dein

exiftool -EXIF:all Pfadname > out.txt

in eine Datei "bla.bat" und dann einfach spawnvp mit cmdname="bla.bat" ohne weitere Parameter aufrufen (oder mit cmdname="cmd" und argv[0]="bla.bat"??). Dann sollte eine Windows-Shell starten und die Umleitung in out.txt übernehmen, so als ob man es per Hand eingegeben hätte.

Hintergrund: Die Windows-Shell zerlegt die Eingabe in Programm und Parameter, und zusätzliche Datei-Umlenkungen. Das "> out.txt" ist also kein Programm-Parameter und kann deshalb auch weder dem spawnnv noch der exiftool-Option argfile übergeben werden (das exiftool sieht "> out.txt" beim Aufruf gar nicht - das bekommt die Umleitung von stdout in eine Datei überhaupt nicht mit - für exiftool ist das einfach nur stdout).
 
Zuletzt bearbeitet:
Danke für die Antwort!

Nachdem die Durchsicht der Hilfe zu den verschiedenen spawns nichts ergeben hat, habe ich nun ein .bat erzeugt mit dem Inhalt
exiftool -@ argfile.txt > %1
Jetzt rufe ich dieses .bat über spawnvp auf mit dem Ausgabefilenamen als argv.
Es funktioniert nun, naja dann halt noch um eine Kurve mehr rumgebogen.

- Erst braucht man das argfile, weil sonst die Command Line zu lang wird.
- dann muss man die Pipe aus dem argfile rauslassen
- und zum Schluss noch das .bat dazwischen schieben

Irgendwie ein bisschen von hinten durch die Brust ins Auge ;)

Erwin
 
WERBUNG
Zurück
Oben Unten