这不需要脚本,Exiftool 可以自己完成。
你的命令看起来像这样:
exiftool -ext jpg -ext mov -ext jpeg -ext mpg -ext avi -ext mp4 -d '[%Y-%m-%d][%A] [%H.%M.%S].%%e' '-Filename<MediaCreateDate' '-Filename<DateTimeOriginal' FileOrDir
( -ext
)-extension
选项限制要操作的文件扩展名。
( -d
)-dateFormat
选项和它后面的格式字符串告诉 Exiftool 日期/时间类型标签使用什么格式。更多信息可在Common Date Format Codes下找到。
接下来的两个选项告诉 exiftool 该文件将根据指定的标签(MediaCreateDate
或DateTimeOriginal
)重命名。对同一标签的早期分配,在这种情况下Filename
,被后来的分配覆盖,所以DateTimeOriginal
如果它存在则将被使用,否则MediaCreateDate
。如果两个项目都不存在,则会发生小错误并且不会重命名文件。如果具有该名称的文件已经存在,也会发生同样的事情,但%%c
可以将其添加到日期格式字符串中以将增量编号添加到文件名中。
需要注意的一件事是,MediaCreateDate
视频文件应该设置为 UTC,并且读取它的程序应该将时间戳调整为本地时间。请参阅Quicktime 标签页上的第四段。但并非所有相机,通常是较旧的相机,都能正确设置,. Exiftool 将按原样返回时间戳,这可能不正确。如果您希望 exiftool 将其调整为本地时间,则可以添加-api QuickTimeUTC
选项.
这是我使用的一些示例输出,testname
而不是filename
.
'X:/!temp/0615090217.jpg' --> 'X:/!temp/[2009-06-15][Monday] [02.17.00].jpg'
'X:/!temp/2013-07-18_12.19.38 - Copy.Jpg' --> 'X:/!temp/[2013-07-18][Thursday] [12.19.38].Jpg'
'X:/!temp/DSC_7689 after.JPG' --> 'X:/!temp/[2006-08-19][Saturday] [09.13.28].JPG'
'X:/!temp/FujiFilmFinePixF200EXR_F0Standard (Provia).jpg' --> 'X:/!temp/[2009-01-25][Sunday] [14.10.46].jpg'
'X:/!temp/FujiFilmFinePixS5Pro.jpg' --> 'X:/!temp/[2006-12-20][Wednesday] [07.20.58].jpg'
'X:/!temp/IMGP0713-XL.jpg' --> 'X:/!temp/[2011-03-10][Thursday] [14.10.54].jpg'
'X:/!temp/IMGP0852.jpg' --> 'X:/!temp/[2003-04-20][Sunday] [16.36.53].jpg'
'X:/!temp/IMG_0938.JPG' --> 'X:/!temp/[2000-01-02][Sunday] [03.04.10].JPG'
'X:/!temp/RCNX0001.JPG' --> 'X:/!temp/[2015-12-20][Sunday] [09.09.05].JPG'
'X:/!temp/Test1.mp4' --> 'X:/!temp/[2015-12-25][Friday] [15.46.15].mp4'
'X:/!temp/Test4.jpg' --> 'X:/!temp/[2010-07-05][Monday] [12.53.36].jpg'
'X:/!temp/Test4.mp4' --> 'X:/!temp/[2014-11-11][Tuesday] [11.11.11].mp4'
'X:/!temp/tif.jpg' --> 'X:/!temp/[2003-03-03][Monday] [03.03.03].jpg'
'X:/!temp/xyzzy.jpg' --> 'X:/!temp/[2012-04-04][Wednesday] [04.04.04].jpg'
这假设在 Linux/Mac 下使用 bash。在 Windows CMD 上,单引号将变为双引号。添加-r
( -recurse
) 选项以递归到子目录。