解决历史图片创建时间错误(批量修改文件创建时间)

最近在整理历史文件,发现很多历史图片,截图,微信拍照等途径创建的图片没有创建时间和修改时间,导致在相册时间轴错误。集中出现在整理的当天。

这些图片基本在文件名都含有创建时间,大多格式如下:

解决历史图片创建时间错误(批量修改文件创建时间)_第1张图片

对于其中绝大部分,带有明确时间的,我们可以很简单的使用exiftool批量修改。

exiftool下载

下载对应系统的版本完成后,以我使用的windows环境举例

解压缩得到exiftool(-k).exe,两种方式:

1.想要全局可使用exiftool命名,把解压缩的exe双击,软件自动复制到了全局可执行文件夹(C:\windows)下

2.我只是需要在照片文件夹下使用一次,直接改名为exiftool.exe,然后复制到照片文件夹

在照片文件夹右键选择 在终端打开 ,打开终端。

使用以下命令批处理:

 .\exiftool.exe '-FileModifyDate

对于部分文件名为时间戳的,上述命令无法批处理。如:(mmexport1496723149305.jpg等)

由于带时间戳的图片过多,写了个简单node程序自动把时间戳改为时间字符串然后执行命令.

由于数量不大而且五年没写代码了,强制使用了nodejs的同步方法,可自行修改为异步并发(注意并发控制)。

const path = require('path')
const child = require('child_process')

const fs = require('fs')
const types = ['png', 'jpg', 'jpeg', 'heic', 'hevc', 'avi', 'mov', 'mp4']
const files = fs.readdirSync('./')
let success = 0
let fail = 0
let all = 0
let skip = 0
files.forEach(s => {
    all = s.length
    let p = path.join(process.cwd(), s)
    const Stat = fs.statSync(p)
    if (!Stat.isDirectory()) {
        const pts = s.split('.')
        if (pts.length && types.includes(pts.pop())) {
            let name = pts.join('')
            let filetime
            if(parseInt(name)) filetime = parseInt(name)
            else if (name.startsWith('mmexport') && name.split('t').length)
                filetime = parseInt(name.split('t').pop())
            else if (name.startsWith('wx_camera_') && name.split('_').length)
                filetime = parseInt(name.split('_').pop())
            else filetime = 0
            if (filetime) {
                const cmd1 = ".\\exiftool.exe -FileCreateDate="+ new Date(filetime).toISOString() +" " + '"' + p + '"'
                const cmd2 = ".\\exiftool.exe -FileModifyDate="+ new Date(filetime).toISOString() +"  " + '"' + p + '"'
                try{
                    child.execSync(cmd1)
                    child.execSync(cmd2)
                    success ++
                } catch (e) {
                    console.log(e)
                    fail++
                }
            } else {
                skip ++
                console.log('skip2 : ' + s)
            }
        } else  skip ++ && console.log('skip1 === >' + s)
    }
})

console.log("success: " + success + "  fail: " + fail)
console.log('skip: ' + skip)

上面代码我只是处理了我图片命名的几种样式,简单做了if-else处理

上面都是假设你基本懂得使用nodejs的前提。如果不会请安装nodejs,然后吧上述代码复制到文本文件,改名xxx.js。打开终端,输入`node xxx.js`

最终效果:

解决历史图片创建时间错误(批量修改文件创建时间)_第2张图片

如果样式过多,也可以是用正则取文件名中的数字字符串,判断是否为10或者13位,并且小于当前时间戳,然后处理。(代码我不写了,正则我试了试,截图给需要的参考)。

解决历史图片创建时间错误(批量修改文件创建时间)_第3张图片

你可能感兴趣的:(解决方案,node.js,音视频,笔记)