这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战
学习贵在坚持, 笔记是灵魂, 温故而知新, 时不时翻一翻, 回顾一下知识点, 加深记忆, 事半功倍!
这里记录一些学习 Node.js
的笔记, 日积月累, 后续会有记录学习更多, 一起来看看吧--
本文学习
node.js
实战: 文件和文件夹的批量重命名
Node.js 批量重命名文件/文件夹
工作生活中经常会遇到需要重命名文件的需求, 少量文件还可以手动, 但是文件多了的话就没那么简单了
在学习 Node.js 的过程中有学到 Node.js 的 文件系统模块, 就来写个工具函数, 一个命令, 批量重命名文件和文件夹
手下简单学习下 Node.js 的内置模块: 文件系统
Node.js 的文件系统模块
提前学习一下实现批量重命名文件和文件夹需要用到的知识点: Node.js 操作文件的相关 API
Node.js
的内置模块: fs 模块, 是一个工具函数, 用于处理文件和目录(文件夹), 即 文件系统
1. readFile 函数
fs 模块的 readFile
函数: 用于读取文件内容, 把解析到的内容, 调用回调函数进行传递
const { readFile } = require('fs')
readFile('iwin621.txt', 'utf8', (error, txt) => {
if(error) throw error
console.log('iwin621 的文本为: ', txt)
})
readFile 的第一个参数为文件路径, 第二个参数为解码文件为字符串的字符编码,
如果没有传编码参数, Node.js 将假定为 Buffer 对象
Buffer 是一个类数组对象, 包含表示文件中字节的数字
2. writeFile 函数
writeFile 函数 用于将文件写入磁盘,
const { writeFile } = require('fs')
writeFile('iwin621.txt', '这是一串文本内容', err => {
if(err) {
console.log('写入文件错误: ', err)
} else {
console.log('File written..')
})
3. readdir 函数
readdir 函数 用于返回目录中的文件, 以字符串数组的方式返回
4. rename 函数
顾名思义, rename 函数用于重命名文件
4. unlink 函数
unlink 函数 用于删除一个文件
实战: 批量重命名文件或文件夹
这里把重命名的逻辑写在一个 changeName.js
文件中, 命令行使用 Node 运行这个文件即可帮我们完成批量重命名的的重复工作
重命名的具体逻辑可根据自己需要进行修改, 可选择重命名深层文件夹中的文件(遍历)
上代码: changeName.js
, 将文件放置需要重命名文件的文件夹内,
具体功能都已进行了备注, 有不懂的可在评论区讨论 -->
const fs = require('fs')
const path = require('path')
let rootPath = __filename // 当前文件完整路径(带文件名后缀)
let PATH = path.dirname(rootPath)
console.log('__filename: ', __filename, PATH)
// let files = fs.readdirSync(PATH)
let files = fs.readdirSync(PATH, (err, files) => {
if (err) throw err
// setTimeout(_ => {
// console.log('readdirfiles', files)
// }, 1000)
})
console.log('files:: typeof:', _type(files), files)
function _type(obj) {
return Object.prototype.toString.call(obj).slice(8, -1)
}
function changeFileName(filepath) {
fs.stat(filepath, function (err, stats) {
// ↓↓ 如下为修改逻辑 ↓↓
if (stats.isFile()) {
// 为文件类型则修改文件名
let filename = path.basename(filepath)
let parentDir = path.dirname(filepath)
/************* ↓↓ '修改文件名的逻辑' by iwin621 *************/
// 去掉文件名中的特定字符 去除空格
// if (filename.indexOf(' ') >= 0) {
if (true) {
// let newName = filename.split(' ')[1].replace(/(\()|(\))/g, '')
let newName = filename.replace(/(\()|(\))/g, '')
let newPath = parentDir + '\\' + newName
fs.rename(filepath, newPath, (err) => {
// callback 要有, 否则报错
if (err) throw err
})
}
/************* ↑↑ '修改文件名的逻辑' by iwin621 *************/
} else if (stats.isDirectory()) {
// 如果为目录文件夹继续遍历执行 // 递归 深层修改
console.log('<=== isDir: [' + filepath + '] ===>')
let filename = path.basename(filepath)
let parentDir = path.dirname(filepath)
if (filename.indexOf(' ') >= 0) {
let newName = filename.split(' ').join('')
let newPath = parentDir + '\\' + newName
fs.rename(filepath, newPath, (err) => {
// callback 要有, 否则报错
if (err) throw err
})
}
renameFilesInDir(filepath)
} else {
console.log('unknow type of file')
}
})
}
// 如果有文件夹 内有文件需要重命名继续遍历重命名
function renameFilesInDir(dir) {
fs.readdir(dir, function (error, files) {
let len = files.length
let file = null
for (let i = 0; i < len; i++) {
file = files[i]
changeFileName(dir + '\\' + file)
}
})
}
renameFilesInDir(PATH)
更多阅读
更多更文阅读请查收: 【Node.js】效率工具-nvm & nrm 等、
【Node.js】包管理工具 npm & yarn 的使用、
【Git】代码版本控制-git 初识&基本操作(一)、 【Git】进阶(二)、
【Node.js】搭建自动化开发环境-基本介绍、 【工具准备】、 【开工】、 【详细步骤(四)】、 【模块处理工具(五)】、 【模块化编程的理解】
跟上节奏, 一步一步! 下文更新预告:
接下来会继续详细学习 Node.js
的工具方法, 冲鸭!! xdm
学习用到的效率工具, 提高开发效率, 为我们的开发提效赋能! 加油!! go~~