EXIFTOOL - 从文件名设置日期时间

时间:2017-01-02 12:25:08

标签: exif exiftool

我有很多以日期格式命名的照片,但EXIF日期不匹配。

e.g。 2016-12-16_20-20-29.jpg

通过EXIFTOOL运行它我几乎可以覆盖日期,但它与确切的日期格式不匹配。

exiftool "-datetimeoriginal<filename" ./

这会将日期设置为正确的日历日但忽略时间。

exiftool "-datetimeoriginal<filename" -d "%Y-%M-%D_%H-%M-%S.%%e" ./

我相信-d参数设置数据格式,但这会返回Warning: Error parsing time in ExifIFD:DateTimeOriginal (PrintConvInv)的错误

这是正确的使用方法吗?

2 个答案:

答案 0 :(得分:5)

您的第一个命令应该可以正常工作。来自Exiftool FAQ 5
“ExifTool在写入时对输入日期/时间值的实际格式非常灵活,并且会尝试将任何值重新格式化为标准格式,除非使用-n选项。可以使用任何分隔符(或者实际上,根本不使用任何分隔符) )。在值中找到的前4个连续数字被解释为年份,然后接下来的2个数字是月份,依此类推。[年份必须是4位数。其他字段预计是2位数,但是一位数如果后续字符是非数字,则允许。]“

该段后面的示例与您的第一个命令几乎相同。

此类操作不需要-d选项。

示例输出

C:\>exiftool -datetimeoriginal "X:\!temp\2016-12-16_20-20-29.jpg"

C:\>exiftool "-datetimeoriginal<filename" "X:\!temp\2016-12-16_20-20-29.jpg"
    1 image files updated

C:\>exiftool -datetimeoriginal "X:\!temp\2016-12-16_20-20-29.jpg"
Date/Time Original              : 2016:12:16 20:20:29

答案 1 :(得分:4)

跟进StarGeek的好答案。

事实证明我已经损坏了我的exif数据,这就是为什么命令没有成功。

为了解决这个问题,我首先清除了数据

exiftool -all= −overwrite_original ./

然后我能够再次运行命令来设置文件名中的日期。另外一个好处是,我发现属性-alldates更新了元数据中的每个日期,不包括文件写入/模式日期。

exiftool "-alldates<filename" −overwrite_original ./

.n.b −overwrite_original会阻止创建备份文件