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

EXIFTOOL - Set datetime from filename

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

例如2016-12-16_20-20-29.jpg

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

exiftool "-datetimeoriginal<filename" ./

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

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

我相信 -d 参数设置了数据格式,但是这个 returns 是 Warning: Error parsing time in ExifIFD:DateTimeOriginal (PrintConvInv)

的错误

这是正确的使用方法吗?

您的第一个命令应该可以正常工作。来自 Exiftool FAQ 5:
"ExifTool is very flexible about the actual format of input date/time values when writing, and will attempt to reformat any values into the standard format unless the -n option is used. Any separators may be used (or in fact, none at all). The first 4 consecutive digits found in the value are interpreted as the year, then next 2 digits are the month, and so on. [The year must be 4 digits. Other fields are expected to be 2 digits, but a single digit is allowed if the subsequent character is a non-digit.] "

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

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

示例输出

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

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

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

跟进 StarGeek 的好答案。

事实证明我损坏了我的 exif 数据,这就是命令没有成功的原因。

为了修复它,我首先清除了数据

exiftool -all= −overwrite_original ./

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

exiftool "-alldates<filename" −overwrite_original ./

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