如何使用Node JS批量重命名文件夹中的文件?
解决Node.js批量按数组顺序重命名文件夹文件的问题
原代码的问题分析
- 路径错误:
fs.readdirSync('./imgs')返回的是文件名而非完整路径,直接传入renameSync会导致Node在当前工作目录查找文件,而非目标文件夹。 - 无效赋值:
fs.renameSync没有返回值,给filesNames[i]赋值完全多余。 - 扩展名丢失风险:如果你的标题数组不带文件扩展名,重命名后文件会丢失格式,无法正常打开。
- 无错误处理:单个文件重命名失败(如权限不足、文件已存在)会导致整个脚本崩溃。
正确实现代码
const fs = require('fs'); const path = require('path'); // 你的标题数组(确保长度和文件数量一致) const arrayTitles = [ `1-name of file`, `2-name of file`, `3-name of file` // ... 剩余288个标题 ]; const folderPath = './imgs'; const fileNames = fs.readdirSync(folderPath); // 先校验文件数量和标题数量是否匹配,避免索引越界 if (fileNames.length !== arrayTitles.length) { console.error('错误:文件数量与标题数量不匹配'); process.exit(1); } fileNames.forEach((oldFileName, index) => { // 构建原文件的完整路径 const oldFilePath = path.join(folderPath, oldFileName); // 提取原文件的扩展名(处理带多个点的文件名,如image.v2.jpg) const fileExtension = path.extname(oldFileName); // 拼接新文件名(保留原扩展名) const newFileName = `${arrayTitles[index]}${fileExtension}`; const newFilePath = path.join(folderPath, newFileName); try { fs.renameSync(oldFilePath, newFilePath); console.log(`重命名成功:${oldFileName} → ${newFileName}`); } catch (error) { console.error(`重命名失败 ${oldFileName}:`, error.message); } });
关键细节说明
- 路径处理:使用
path.join自动处理不同操作系统的路径分隔符(Windows用\,Linux/macOS用/),避免手动拼接路径的错误。 - 扩展名保留:通过
path.extname提取原文件的扩展名,确保重命名后文件格式不变。 - 错误容错:用
try-catch包裹重命名操作,单个文件失败不会终止整个脚本,同时输出错误信息便于排查。 - 索引匹配:
forEach的第二个参数index直接对应标题数组的索引,保证文件和标题按顺序一一对应。
内容的提问来源于stack exchange,提问作者Nicolás Cerdán
相关产品推荐
相关产品推荐

