node脚本将iPhone照片批量重命名为拍摄日期

99 阅读1分钟

【背景】

我一向有定期把手机照片备份到电脑上的习惯,但是iPhone手机导出照片真的很不友好,好不容易在Windows上能打开iPhone拍摄的照片了,文件名里不显示拍摄时间我就忍了,可是创建时间和修改时间也都和拍摄时间对不上!!

e4036fa59bc6acea571ae5477aa86a6.png

image.png 真的很难忍! 查看照片属性发现其exif信息里还有拍摄时间,

image.png 于是下载了很多批量重命名工具尝试(包括不限于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 成功修改文件名

image.png