我有很多以日期格式命名的照片,但 EXIF 日期不匹配。
例如
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)
的错误
这是正确的使用方法吗?
您的第一个命令应该可以正常工作。 来自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
跟进 StarGeek 的好答案。
事实证明我损坏了我的 exif 数据,这就是命令失败的原因。
为了解决这个问题,我首先清除了数据
exiftool -all= −overwrite_original ./
然后我可以再次运行该命令来设置文件名中的日期。额外的好处是我发现了属性
-alldates
,它更新了元数据中的每个日期(不包括文件写入/修改日期)。
exiftool "-alldates<filename" −overwrite_original ./
.n.b
−overwrite_original
防止创建备份文件
将 oldest_datetime_config 保存在主文件夹
C:\Users\YOURUSERNAME
或主目录 ~
或安装 exiftool 的同一文件夹中。这一步对于后续步骤的成功很重要。
您可以在此处的脚本中找到这些内容,但我发现运行我在下面的选项中提到的 pic 文件夹中的命令比通过 python 脚本 exif-scripts/setToOldestDate.py 运行这些命令要快得多。为了更快地处理,您可以运行这些命令直接在您计划的 pic 文件夹中的 powershell 中。
如果您正在运行 WSL,则从 poweshell 运行这些命令,而不是 WSL,因为 Windows 虚拟化的文件系统读写会耗尽您的 ram 并减慢进程直至停止。
🦺 请注意,这些脚本是递归的,并且会影响所有子文件夹。
好吧……现在——选择你的选项:
这是来自 exiftool 的非常灵活和模糊的解析器,但如果您希望它绝对确定,那么您可以重新管理文件以包含 yyyymmdd_hhmmss 并删除其之前的所有其他数字(之后就可以了)。
exiftool "-FileModifyDate<filename" −overwrite_original -S -m -progress -ee -q -q ./
exiftool -overwrite_original "-FileModifyDate<OldestDateTime" "-ModifyDate<OldestDateTime" "-DateTimeOriginal<OldestDateTime" "-CreateDate<OldestDateTime" "-GPSDateTime<OldestDateTime" -S -m -progress -ee -q -q ./
exiftool "-filename<OldestDateTime" -d PXL_%Y%m%d_%H%M%S%%-c.%%e -S -m -ee -progress -q -q ./
推送当前目录中的所有文件使用
adb push -a . /sdcard/DCIM/Camera/
-a 是保留属性。
最后一步,您需要刷新 Android 媒体存储数据库,让 Google 照片知道要备份哪些新文件。目前它并不总是自动检测,所以为什么要等待呢。安装Refresh MediaStore并在手机上的adb推送完成后运行它。然后您可以打开 Google Photos 并看到备份正在开始。