批量删除下载的教程解压包里面文件名的广告字符串

可以递归并发遍历所有子文件夹(类似多线程, 也可以改为串行遍历(类似单线程概念

挺方便的, 分享给大家

运行的时候就先修改下面的 filePath 和 strDelete 就可以了

node file.js

/* eslint-disable no-unused-expressions */
/*
因为经常从百度下载的收费文件夹里面的 文件夹和文件名都被插入了版权字符串导致异常的丑, 于是做了个这个快速批量的一次性修正所有子目录下的文件和文件夹名字, 删除不必要的版权字符串
*/
const fs = require('fs').promises
const path = require('path')

// 要替换的文件夹根目录绝对路径
const filePath = path.resolve(String.raw`F:\@Lesson\XXXX课程大全`)
// 文件夹名和文件名里包含的要剔除的字符串
const strDelete = '(关注公众号XXXX,免费领取200G+教程)'

/**
 * 删除绝对路径中结尾文件名里面任意位置的指定字符串
 * @param {String} srcStr 输入字符串
 * @param {String} str 要删除的字符串
 * @returns
 */
const trimFromEnd = (srcStr, str) => {
  if (!str.trim().length) {
    throw Error('trimFromEnd(srcStr, str)的参数 str 不可以为空')
  }
  // 修正输入根文件夹的名字里面含有要替换的str导致异常的bug
  if (srcStr.lastIndexOf(path.sep) > srcStr.indexOf(str)) return srcStr
  const index = srcStr.lastIndexOf(str)
  return srcStr.substr(0, index) + srcStr.substr(index + str.length)
}

/**
 * 搜索并替换文件夹名和文件名里面包含的XX字符串, 含子目录
 * @param {String}} filePath 绝对路径
 */
async function fileDisplay(filePath) {
  const files = await fs.readdir(filePath)
  if (files.length > 0) {
    // 去掉await就是串行, 这里我用并行处理, 速度快
    await files.map(async (filename, index, arr) => {
      try {
        const fileDir = path.join(filePath, filename)
        const stats = await fs.stat(fileDir)
        const oldName = fileDir
        const newName = trimFromEnd(fileDir, strDelete)
        if (stats.isFile()) {
          console.log('原始=>', oldName)
          console.log('改为=>', newName)
          try {
            await fs.access(oldName)
            oldName !== newName && (await fs.rename(oldName, newName))
          } catch (err) {
            console.log('文件不存在或者权限不够', err)
          }
        } else if (stats.isDirectory()) {
          // 先改名, 再递归, 避免回溯的时候找不到改名前的文件夹了
          fileDir !== newName && (await fs.rename(fileDir, newName))
          await fileDisplay(newName)
          // Promise.resolve()
        }
      } catch (err) {
        console.log('发生错误', err)
      }
    })
  }
}

fileDisplay(filePath)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AKULAKK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值