Wie kann ich ExifTool nach Kameramodell umbenennen, wenn der Name einen Schrägstrich enthält?

Ich verwende ExifTool, um alle meine Bilder mit den folgenden zwei Befehlen stapelweise umzubenennen:

"-FileName<${Exif:Model}-(%%f).%%e"
-d %%Y%%m%%d-%%H%%M%%S-%%%%f.%%%%e "-FileName<DateTimeOriginal"

Dies gibt mir Dateinamen wie:

20110711-144637-DMC-FZ28-(P1020103).JPG

und

20110711-145144-iPhone 4-(IMG_1004).JPG

Ich habe einige Bilder erhalten, die mit einem Samsung S860 aufgenommen wurden, das ein Modell-Tag von hat<KENOX S860 / Samsung S860>

Ich bin mir nicht sicher, ob ExifTool (v8.60) selbst oder die Windows-Befehlsshell (7 64-Bit) dies tut, aber der erste Befehl behandelt das /als Verzeichniswechsel und gibt beim Ausführen einen Fehler aus :

Warning: Error creating directory for '<KENOX S860  / Samsung S860>-(SDC12529).JPG' - D:/Users/xxx/Desktop/ExifProcess/SDC12529.JPG
Error creating directory <KENOX S860

Gibt es eine Möglichkeit, ExifTool zu zwingen, dem Schrägstrich zu entkommen?

Ich habe die Optionen und ausprobiert, die die -exund -Ecodieren <, >aber nicht die /.

Gibt es eine Möglichkeit, ExifTool zu zwingen, das nicht /als Teil des Pfads zu behandeln?

Unten ist die vollständige process.batDatei, die ich verwende:

@Echo Off
MD D:\Users\xxx\Desktop\ExifProcess
COPY D:\Users\xxx\Pictures\Import\*.jpg D:\Users\xxx\Desktop\ExifProcess
"P:\Program Files (x86)\ExifTool\exiftool.exe" "-FileName<${Exif:Model}-(%%f).%%e" D:\Users\xxx\Desktop\ExifProcess\*.jpg
"P:\Program Files (x86)\ExifTool\exiftool.exe" -d %%Y%%m%%d-%%H%%M%%S-%%%%f.%%%%e "-FileName<DateTimeOriginal" D:\Users\xxx\Desktop\ExifProcess\*.jpg
Pause
Betrachten Sie den folgenden Arbeitsablauf: (1.1) Durchlaufen Sie den Fotoordner alphabetisch (1.2) Geben Sie jedes Foto Exif:Modelin eine Textdatei aus (2) Durchlaufen Sie die Textdatei, indem Sie /z . B. ersetzen -(3.1) Durchlaufen Sie den Fotoordner erneut alphabetisch (3.2) Benennen Sie Dateien um entsprechend der geänderten Textdatei
@koiyu: siehe meine Antwort unten - dasselbe, aber keine Notwendigkeit für eine Zwischentextdatei (oder für zwei Durchgänge).

Antworten (5)

Dies wurde zwar schon vor einiger Zeit gefragt, aber da keine Antwort als Antwort markiert ist, biete ich diese an.

Vielleicht besteht die Lösung darin, das Semikolon hinter dem Modell zu verwenden, um ungültige Zeichen zu entfernen > Modell;

exiftool '-filename<%f_${model;}.%e' dir

Benennen Sie alle Dateien in Verzeichnis um, indem Sie den Kameramodellnamen zum Dateinamen hinzufügen. Das Semikolon nach dem Tag-Namen in geschweiften Klammern bewirkt, dass Zeichen, die in Windows-Dateinamen ungültig sind, aus dem Tag-Wert gelöscht werden (eine Erklärung finden Sie unter "Erweiterte Formatierungsfunktion").

Quelle: ExifTool-Dokumentation und diese Frage

Mit exiftool besteht die Antwort darin, ein benutzerdefiniertes Tag basierend auf EXIF:Model zu erstellen, das die anstößigen Zeichen herausfiltert. Diese Frage wird im ExifTool-Forum gestellt und beantwortet:

http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2961

Ich benutze jheaddafür schon, bevor ich diese Funktion von ExifTool kannte, und was ich tue, ist einfach ein Wrapper-Skript zu verwenden

  1. Extrahieren Sie den Modellnamen in eine temporäre Variable
  2. munge den Namen mit einer Reihe von Regeln, die ich aufgebaut habe
  3. umbenennen, indem Sie diese Variable in der Shell-Befehlszeile anstelle der Zeichenfolgencodes für das Umbenennungstool selbst verwenden

Das ist ein bisschen kludgy, aber hey, kludges sind das, wofür Shell-Skripte in erster Linie da sind, richtig? Und es hat den Vorteil, dass es mit anderen seltsamen Modellnamen wie der schrecklich beschrifteten "*ist" -Serie von Pentax zu tun hat. Und Sie verwenden bereits ein Batch-Skript. Setzen Sie einfach ein bisschen mehr Intelligenz in dieses Level.

Richtig, aber nicht wirklich hilfreich für Fotografen, die Windows verwenden und selten Shell-Scripting beherrschen.
Sie haben PowerShell, richtig? Es ist nicht so beängstigend. :)

Versuche dies:

exiftool '-FileName<${CreateDate}_${Exif:Model}.jpg' -d %Y%m%d_%H%M%S-%%2c *

oder dieses

exiftool '-FileName<${CreateDate}_${Exif:Model}_${filename}' -d %Y%m%d_%H%M%S *
Vielleicht könnten Sie einen Kommentar hinzufügen, um zu erklären, wie Sie auf diese Befehle gekommen sind und was die Unterschiede zwischen ihnen sind?

Bisher ist die einzige Antwort, die mir eingefallen ist, hinzuzufügen

-overwrite_original_in_place -preserve "-Model=Samsung S860"

als erste ExifTool-Aktion, aber dies ändert offensichtlich die Datei selbst und nicht nur den Dateinamen.