使用 Node.js 批量操作文件

2021年12月30日

从百度云网盘下载一些视频教学资源的时候,在每个文件夹中都会有一些不需要的东西,比如说淘宝店的二维码图片,一些广告文档和软件等等。如果文件夹的数量比较少还好,数量大的话对于强迫症选手来说把资料规整好就非常的痛苦了。这时候我们就可以通过 node 编写脚本来批量对文件夹进行操作。

需求

1. 重命名所有的文件夹,去掉淘宝客服账号;

2. 删除所有文件夹中除了 视频 的文件;

删除函数

首先编写一个递归删除文件的函数:

javascript 复制代码
/**
 *
 * @param {string} path 需要删除的文件夹路径
 * @param {string} filename 不需要删除的文件名
 */
function removeDir(url, filename = '') {
	let files = [];
	files = fs.readdirSync(url).filter(item => item !== filename);
	files.map(item => {
		const currentPath = path.join(url, item);
		if (fs.statSync(currentPath).isDirectory()) {
			removeDir(currentPath);
		} else {
			fs.unlinkSync(currentPath);
		}
	});
	if (!filename) {
		fs.rmdirSync(url);
	}
}

操作函数

javascript 复制代码
/**
 *
 * @param {string} url 需要处理的文件夹路径
 * @param {string} name 需要替换的文件名称
 * @param {string} filename 例外的文件名称
 */
function handleDir(url, name, replaceName, filename) {
	fs.readdirSync(url).map(item => {
		if (item.indexOf(name) === -1) return;
		const newName = item.replace(name, replaceName);
		const oldPath = path.join(url, item);
		const newPath = path.join(url, newName);
		fs.renameSync(oldPath, newPath);
		removeDir(newPath, filename);
	});
}

完整代码

javascript 复制代码
const fs = require('fs');
const path = require('path');

function removeDir(url, filename = '') {
	let files = [];
	files = fs.readdirSync(url).filter(item => item !== filename);
	files.map(item => {
		const currentPath = path.join(url, item);
		if (fs.statSync(currentPath).isDirectory()) {
			removeDir(currentPath);
		} else {
			fs.unlinkSync(currentPath);
		}
	});
	if (!filename) {
		fs.rmdirSync(url);
	}
}

function handleDir(url, name, replaceName, filename) {
	fs.readdirSync(url).map(item => {
		if (item.indexOf(name) === -1) return;
		const newName = item.replace(name, replaceName);
		const oldPath = path.join(url, item);
		const newPath = path.join(url, newName);
		fs.renameSync(oldPath, newPath);
		removeDir(newPath, filename);
	});
}

// 将当前路径下所有包含淘宝客服名的文件夹名替换掉,并且删除除了视频以外的其他子文件夹
handleDir(__dirname, '-【旺旺:aaaaaaaa】', '', '视频');
相关文章

Vite项目配置本地HTTPS

React Native 开发环境安装踩坑

《JavaScript 高级程序设计》第10-16章