如何使用ExifTool

时间:2018-12-20 05:44:30

标签: batch-file cmd 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 个答案:

答案 0 :(得分:2)

要从文件名设置DateTimeOriginal,该命令非常简单
exiftool "-DateTimeOriginal<Filename" -if "not $datetimeoriginal or ($datetimeoriginal eq '0000:00:00 00:00:00')" -ext jpg DIR

这是基于Exiftool FAQ #5的,它说:“ ExifTool在写入时对于输入日期/时间值的实际格式非常灵活,除非使用-n选项,否则它将尝试将任何值重新格式化为标准格式。 。可以使用任何分隔符(或实际上根本不使用分隔符。)在值中找到的前4个连续数字将解释为年,然后再将2个数字解释为月,依此类推。”

我删除了示例的$filetype eq "JPEG"部分,并将其替换为-ext option,因为检查Filetype是限制处理文件的一种糟糕方法,因为exiftool仍会处理和提取文件每个文件中的所有元数据以执行检查。

请注意,如您的示例所示,.mp4文件类型不能包含DateTimeOriginal标记。相反,您必须使用类似CreateDate的名称。还要注意,exiftool写入视频文件的能力有限。

由于文件名不是时间戳记类型标记,因此无法使用发现的-d (dateformat) option。相反,您将必须使用Advanced formatting feature来拆分文件名。给定第一个示例文件名,您的命令将是:

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文件操作,例如重命名和移动(但在标记处理中不可用)。