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

sid*_*son 4 exif exiftool

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

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

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

exiftool "-datetimeoriginal<filename" ./
Run Code Online (Sandbox Code Playgroud)

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

exiftool "-datetimeoriginal<filename" -d "%Y-%M-%D_%H-%M-%S.%%e" ./
Run Code Online (Sandbox Code Playgroud)

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

这是使用正确的方法吗?

Sta*_*eek 5

您的第一个命令应该可以正常工作。来自Exiftool常见问题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
Run Code Online (Sandbox Code Playgroud)


sid*_*son 5

跟进StarGeek的好答案。

原来我已经破坏了我的exif数据,这就是为什么该命令未成功的原因。

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

exiftool -all= ?overwrite_original ./
Run Code Online (Sandbox Code Playgroud)

然后我可以再次运行命令以从文件名设置日期。另外一个好处是,我发现了该属性-alldates会更新元数据中每个日期(不包括文件写入/修改日期)的每个日期。

exiftool "-alldates<filename" ?overwrite_original ./
Run Code Online (Sandbox Code Playgroud)

.nb ?overwrite_original阻止创建备份文件

  • 一些其他信息。除了清除文件中的所有元数据外,您还可以尝试使用以下命令来恢复尽可能多的数据:`exiftool -all = -tagsfromfile @ -all:all -unsafe`另外,`-alldates`仅影响三个因素常用的EXIF日期/时间标签:“ DateTimeOriginal”,“ CreateDate”和“ ModifyDate”。要更改所有日期时间标记,请使用-Time:all。也可以使用-overwrite_original来避免备份文件。这样比较安全,因为它先创建一个副本,然后替换原始文件,而不是直接覆盖原始文件。 (2认同)