【背景】
我一向有定期把手机照片备份到电脑上的习惯,但是iPhone手机导出照片真的很不友好,好不容易在Windows上能打开iPhone拍摄的照片了,文件名里不显示拍摄时间我就忍了,可是创建时间和修改时间也都和拍摄时间对不上!!
真的很难忍! 查看照片属性发现其exif信息里还有拍摄时间,
于是下载了很多批量重命名工具尝试(包括不限于ACDSee、光影大师),但是都获取不到heic图片的拍摄时间,可能是不兼容heic格式。 尝试几个软件失败后,决定自己写脚本来搞定我的需求。
【实现】
npm上现成的库很多,处理exif专业的就是exif包。但是使用中发现它仍然不支持heic格式,于是更换为exifr,终于搞定了
rename.js
const fs = require('fs');
const path = require('path')
const exifr = require('exifr');
function listFile(dir) {
const arr = fs.readdirSync(dir);
arr.forEach(item => {
const fullPath = path.join(dir, item);
const stats = fs.statSync(fullPath);
if (stats.isDirectory()) {
listFile(fullPath)
} else {
exifr.parse(fullPath)
.then(output => {
const originalTime = output.DateTimeOriginal;
if (originalTime) {
const localTime = originalTime.toLocaleString().split('/').join('-').split(':').join('-');
const [name, kuozhan] = item.split('.');
const newName = `${name} ${localTime}.${kuozhan}`;
fs.renameSync(fullPath, path.join(dir, newName))
}
}).catch(e => {
})
}
})
}
const dir = "E:\\照片\\2024\\202403__"; // 这里是要批量处理的文件夹路径 // 这里是要批量处理的文件夹路径
listFile(dir)
运行 node ./rename.js
成功修改文件名