使用exiftool写入文件名CreateDate或FileModifyDate,无论存在什么。
问题是什么:-如果不存在CreateDate,则会发生错误,并且文件名不会根据创建日期更改。
"Warning: No writable tags set from DSC_0680a.JPG"
我如何告诉exiftool编写CreateDate或FileModifyDate——exif信息中存在的内容?
目前,我正在使用以下命令:
for pic in DSC*.*; do exiftool "-FileName<CreateDate" -d ${pic//.*}_%Y%m%d_%H%M%S.jpg" "$pic"; done;
这也不起作用:
exiftool "-FileName<CreateDate" -d "DSC_0680a_%Y%m%d_%H%M%S.jpg" DSC_0680a.JPG || exiftool "-FileName<FileModifyDate" -d "DSC_0680a_%Y%m%d_%H%M%S.jpg" DSC_0680a.JPG
在循环中使用exiftool可以极大地延长处理时间,因为启动是其最大的性能打击(请参阅exiftool常见错误#3(。
您不需要两个单独的exiftool命令。您可以将两个选项放在同一个命令中,exiftool将使用最后一个有效选项(请参阅-TAG[+-^]=[VALUE]
选项下的注释#1(。
你可以使用
exiftool "-FileName<FileModifyDate" "-FileName<CreateDate" -d "%%f_%Y%m%d_%H%M%S.%%e" /path/to/files/
如果CreateDate
不存在,则exiftool将在FileModifyDate
上回退
在这里,我删除了${pic//.*}
,并将其替换为exiftool的%f
和%e
变量,它们分别代表文件名和扩展名(请参见-w
(-TextOut
(选项(。在日期格式字符串中使用时,文件名变量的百分号需要加倍。
需要注意的是,如果在Windows Bat文件中使用,则所有百分号都需要加倍,这将导致-d
(-dateFormat
(字符串为%%%%f_%%Y%%m%%d_%%H%%M%%S.%%%%e
(请参阅ExifTool常见问题解答#27(。
我用linux操作员尝试了这个命令"amp&";,"这意味着无论第一个命令发生什么,也执行第二个命令";,它奏效了(?(。
- 第一个命令更改的文件名
- 它不会从第二命令再次改变
- 它保留从第一个命令传递的文件名
- 它不再存在,因为它改变了
My exiftool命令根据图像信息标记中存在的CreateDate或FileModifyDate更改/重命名文件名。
for pic in DSC*.*; do exiftool "-FileName<CreateDate" -d "${pic//.*}_%Y%m%d_%H%M%S.jpg" "$pic" && exiftool "-FileName<FileModifyDate" -d "${pic//.*}_%Y%m%d_%H%M%S.jpg" "$pic" ; done;