Как заставить ExifTool переименовываться по модели камеры, если имя содержит косую черту?

Я использую ExifTool для пакетного переименования всех моих изображений с помощью следующих двух команд:

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

Это дает мне такие имена файлов, как:

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

а также

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

Мне прислали несколько фотографий, сделанных на Samsung S860 с тегом Model<KENOX S860 / Samsung S860>

Я не уверен, что это делает сам ExifTool (v8.60) или командная оболочка Windows (7 64-разрядная версия), но первая команда обрабатывает /как изменение каталога и выдает ошибку при попытке выполнить :

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

Есть ли способ заставить ExifTool избежать символа косой черты?

Я пробовал варианты -exи -E, которые кодируют <и , >но не /.

Есть ли способ заставить ExifTool не рассматривать /как часть пути?

Ниже приведен полный process.batфайл, который я использую:

@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
Рассмотрим следующий рабочий процесс: (1.1) прокручивать папку с фотографиями в алфавитном порядке (1.2) выводить каждую фотографию Exif:Modelв текстовый файл (2) прокручивать текстовый файл, заменяя его /, например, -(3.1) прокручивать папку с фотографиями снова в алфавитном порядке (3.2) переименовывать файлы согласно измененному текстовому файлу
@koiyu: см. мой ответ ниже — то же самое, но нет необходимости в промежуточном текстовом файле (или в двух проходах).

Ответы (5)

Хотя это было задано некоторое время назад, но, поскольку ни один ответ не помечен как Ответ, я предлагаю это.

Возможно, решение состоит в том, чтобы использовать точку с запятой за моделью для удаления недопустимых символов> модель;

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

Переименуйте все файлы в каталоге, добавив название модели камеры к имени файла. Точка с запятой после имени тега внутри фигурных скобок приводит к удалению символов, недопустимых в именах файлов Windows, из значения тега (пояснение см. в разделе «Расширенные функции форматирования»).

Источник: документация ExifTool и этот вопрос

Используя exiftool, ответ заключается в создании определяемого пользователем тега на основе EXIF:Model, который отфильтровывает оскорбительные символы. Этот вопрос задают и отвечают на форуме ExifTool:

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

Я использовал jheadдля этого еще до того, как узнал об этой функции ExifTool, и я просто использую скрипт-оболочку для

  1. извлечь имя модели во временную переменную
  2. изменить имя, используя набор правил, который я создал
  3. переименуйте, используя эту переменную в командной строке оболочки, а не строковые коды для самого инструмента переименования

Это немного глупо, но, эй, кладжи — это то, для чего в первую очередь нужны скрипты оболочки, верно? И у него есть то преимущество, что он имеет дело с другими странными названиями моделей, такими как серия Pentax с ужасной маркировкой «*ist». И вы уже используете пакетный скрипт. Просто добавьте немного больше ума на этот уровень.

Верно, но не очень полезно для фотографов, использующих Windows, которые редко разбираются в сценариях оболочки.
У них есть PowerShell, верно? Это не так страшно. :)

Попробуй это:

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

или это

exiftool '-FileName<${CreateDate}_${Exif:Model}_${filename}' -d %Y%m%d_%H%M%S *
Возможно, вы могли бы добавить комментарий, объясняющий, как вы придумали эти команды и в чем между ними разница?

Пока единственный ответ, который я придумал, это добавить

-overwrite_original_in_place -preserve "-Model=Samsung S860"

как первое действие ExifTool, но это, очевидно, изменяет сам файл, а не только имя файла.