#如何在Node.js中批量更名文件
了解如何使用Node.js更改一组文件名
在本篇博客文章中,我将解释如何更改一组文件的名称。
相同的过程也适用于将文件移动到另一个文件夹,因为在更改名称时,实际上是更改文件的路径。
进行此任务的动机是:在Hugo中,我们可以将博客文章编写为文件,如下所示:
1 | first-post.md |
我们还可以将它们添加到包含 index.md
文件的文件夹中:
1 | first-post/ |
不同之处在于,使用文件夹可以更轻松地添加图片并将其与博客文章关联起来。
我本可以手动进行更改,但这个文件夹中有大约50个文件,我真的不想自己动手。
我希望能够自动进行更改。
让我们首先引入我们将使用的一个核心模块:fs
。由于它是一个核心模块,所以无需进行 npm install
。
1 | const fs = require('fs') |
然后,获取对当前文件夹的引用。假设我们要在想要执行此更改的同一文件夹中运行脚本。
__dirname
是指向当前工作文件夹的变量。
我获取了所有文件和文件夹的列表:
1 | const files = fs.readdirSync(__dirname) |
然后,我仅筛选出以 .md
结束的项:
1 | for (const file of files) { |
一旦我们有了代表文件名的 file
引用,我们就可以调用 fs.mkdirSync()
来创建文件夹:
1 | fs.mkdirSync( |
在创建文件夹后,我们调用 fs.renameSync()
。
我使用阻塞版本的 mkdirSync()
和 renameSync()
而不是 mkdir()
和 rename()
的原因是,我希望在移动文件到文件夹之前等待文件夹的创建。否则,如果第二个函数在第二个函数之前运行,我们可能会遇到错误(应该使用 await
,但Node.js API 不使用 promises,我们必须使用promisify,但使用阻塞版本的API更简单)。
fs.renameSync()
函数接受3个参数:
- 当前路径
- 我们要移动到的路径
- 如果出现错误则触发回调
当前路径是:
1 | __dirname + '/' + file |
我们要移动到的路径是:
1 | __dirname + '/' + file.replace('.md', '') + '/index.md' |
看到了吗?我们根据文件名创建一个新文件夹,然后添加 index.md
:
1 | fs.renameSync( |
以下是完整的代码:
1 | const fs = require('fs') |
tags: [“Node.js”, “file operation”, “file renaming”, “fs module”]