nodejs 实现把某个文件夹下所有文件全部按文件创建时间命名
话不多说,先上代码,再慢慢解释
打开终端先npm i fs
const fs = require('fs');
let path = 'C:\\Users\\Administrator\\Pictures\\Saved Pictures';//想读取的文件夹的绝对路径
let files = fs.readdirSync(path);//读取该文件夹下的所有文件
//执行遍历
recursiveFiles(0);
//遍历文件先获取每个文件的详情信息,再改名
function recursiveFiles(i) {
if (i < files.length) {
let currentFile = files[i];
let oldPath = path + '\\' + currentFile;
//获得文件信息
fs.stat(oldPath, function (err, data) {
if (err) {
throw err;
}
//这三个时间就看你想以哪个命名了
var creatTime = new Date(data.ctime).toJSON(); //创建时间
var updateTime = new Date(data.mtime).toJSON(); //修改时间
var activeTime = new Date(data.atime).toJSON(); //访问时间
//将时间格式转换成YYYY-MM-DD HH:MM:SS,需要注意的是文件名称不可以用英文:,所以需要把英文:全部转成中文:
var date = new Date(+new Date(creatTime) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '').replace(/:/g, ':')
//只是改名不改路径,所有newPath前缀还是用以前的path,如果想放到新的文件夹里,自行配置
//如果是在原文件名基础前面加时间就执行下面这条
// let newPath = path + '\\' + date + "_" + currentFile;
//如果是不要原来文件名,就先取文件类型,然后把时间拼到文件类型前面
let type = currentFile.lastIndexOf('.') > -1 ? currentFile.substring(currentFile.lastIndexOf('.')) : "";
let newPath = path + '\\' + date + type;
//重命名
fs.rename(oldPath, newPath, (err) => {
if (err) {
throw err;
}
i++;
//打印剩余文件数量
let remainCount = files.length - i;
console.log('重命名完成-----还剩' + remainCount + '条');
recursiveFiles(i);
});
})
} else {
console.log('全部完成')
//打印效果
console.log(fs.readdirSync(path))
}
}
打开终端运行js,效果如下