Как установить DateTimeOriginal файла из имени файла, используя ExifTool
У меня есть каталог со многими файлами изображений, для которых не установлены метаданные DateTimeOriginal, но эта дата содержится в самом имени файла в формате YYYMMDD
например, 20120524_091536.mp4
Я хочу использовать exiftool для перемещения этих файлов в папки с годом, а затем в подпапки месяца (затем позже также установите его DateTimeOriginal, используя эту дату из имени файла).
Что-то вроде этого:
exiftool -d "%Y-%m-%d" "-testname<D:\Pictures\${filename#;DateFmt('%Y')}\${filename#;DateFmt('%m')}\$FileName" "D:\Pictures\2012-05-24" -r
Но это дает Error converting date/time for 'filename'
ошибка. Что имеет смысл, как мне сказать отформатировать только первые 8 цифр имени файла к дате?
Причина, по которой я хочу использовать ExifTool для этого, заключается в том, что я собираюсь еще больше уточнить это утверждение, чтобы сделать это только для файлов, которые еще не имеют datetimeoriginal
набор метаданных, поэтому exiftool может отфильтровать их... что-то вроде этого классификатора:
exiftool '-datetimeoriginal<filemodifydate' -if '(not $datetimeoriginal or ($datetimeoriginal eq "0000:00:00 00:00:00")) and ($filetype eq "JPEG")'
Но вместо установки datetimeoriginal для filemodifydate мне нужно установить для него дату, отформатированную из имени файла.
1 ответ
Установить DateTimeOriginal
из имени файла, команда так же просто, какexiftool "-DateTimeOriginal<Filename" -if "not $datetimeoriginal or ($datetimeoriginal eq '0000:00:00 00:00:00')" -ext jpg DIR
Это основано на часто задаваемых вопросах Exiftool #5, в которых говорится, что "ExifTool очень гибок в отношении фактического формата вводимых значений даты / времени при записи и будет пытаться переформатировать любые значения в стандартный формат, если не используется опция -n. Любые разделители могут использоваться (или фактически вообще не использовать). Первые 4 последовательные цифры, найденные в значении, интерпретируются как год, затем следующие 2 цифры - месяц и т. д. "
Я удалил $filetype eq "JPEG"
часть вашего примера и заменил его с опцией -ext для проверки Filetype
плохой способ ограничения обрабатываемых файлов, так как exiftool все равно будет обрабатывать и извлекать все метаданные из каждого файла для выполнения проверки.
Обратите внимание, что тип файла.mp4, как показано в вашем примере, не может содержать DateTimeOriginal
тег. Вместо этого вам придется использовать что-то вроде CreateDate
, Также обратите внимание, что exiftool имеет ограниченную возможность записи в видеофайлы.
Поскольку имя файла не является тегом типа timestamp, вы не можете использовать опцию -d (dateformat), как вы обнаружили. Вместо этого вам придется использовать функцию расширенного форматирования, чтобы разделить имя файла. Учитывая первый пример имени файла, ваша команда будет:
exiftool "-testname<D:\Pictures\${filename;s/^(\d{4}).*/$1/}\${filename;s/^\d{4}(\d\d).*/$1/}\%F" "D:\Pictures\2012-05-24" -r
-d "%Y-%m-%d"
часть удалена, так как она не использовалась в вашем примере. ${filename;s/^(\d{4}).*/$1/}
использует регулярное выражение для сопоставления первых четырех цифр имени файла и удаления остальных. ${filename;s/^\d{4}(\d\d).*/$1/}
удаляет первые четыре цифры, сопоставляет следующие две и удаляет оставшуюся часть имени файла. %F
переменная exiftool для имени файла +ext, используемая для различных файловых операций exiftool, таких как переименование и перемещение (но недоступно при обработке тегов).