Node.js学习实战: 文件系统模块-文件的批量重命名

697 阅读4分钟

这是我参与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 的使用

【Node.js】安装&文档

【Github】多人协作(二)

【Github】基本使用(一)

【Git】代码版本控制-git 初识&基本操作(一)【Git】进阶(二)

【Node.js】搭建自动化开发环境-基本介绍【工具准备】【开工】【详细步骤(四)】【模块处理工具(五)】【模块化编程的理解】

跟上节奏, 一步一步! 下文更新预告:

接下来会继续详细学习 Node.js 的工具方法, 冲鸭!! xdm

学习用到的效率工具, 提高开发效率, 为我们的开发提效赋能! 加油!! go~~