You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中无第三方模块按类型批量移动文件

在Node.js中无需第三方模块批量移动同类型文件

当然可以实现!你遇到的问题是因为Node.js的fs.rename本身只支持单个文件的操作,不像CMD的move命令那样自带通配符解析能力,但我们完全可以用Node.js内置模块来实现批量移动同类型文件的需求,不需要第三方包,也不需要构建JSON对象。

方案1:同步方式(适合简单脚本场景)

这种方式代码直观,适合不需要考虑事件循环阻塞的小型脚本:

const fs = require('fs');
const path = require('path'); // 用path模块处理路径更可靠,适配不同操作系统

// 定义源目录和目标目录
const sourceDir = './';
const targetDir = './dir';

// 先确保目标目录存在,不存在则创建(支持多级目录)
if (!fs.existsSync(targetDir)) {
  fs.mkdirSync(targetDir, { recursive: true });
}

// 读取源目录下的所有文件
const files = fs.readdirSync(sourceDir);

// 遍历文件,筛选并移动所有.txt文件
files.forEach(file => {
  // 检查文件扩展名是否为.txt(忽略大小写)
  if (path.extname(file).toLowerCase() === '.txt') {
    const sourcePath = path.join(sourceDir, file);
    const targetPath = path.join(targetDir, file);
    
    try {
      fs.renameSync(sourcePath, targetPath);
      console.log(`已成功移动: ${file}`);
    } catch (err) {
      console.error(`移动文件${file}失败:`, err.message);
    }
  }
});

console.log('批量移动任务完成!');

方案2:异步Promise方式(适合非阻塞场景)

如果你的应用需要保持事件循环不阻塞,推荐使用异步版本:

const fs = require('fs').promises;
const path = require('path');

async function batchMoveTxtFiles() {
  const sourceDir = './';
  const targetDir = './dir';

  try {
    // 检查目标目录是否存在,不存在则创建
    await fs.access(targetDir).catch(async () => {
      await fs.mkdir(targetDir, { recursive: true });
    });

    // 异步读取源目录文件列表
    const files = await fs.readdir(sourceDir);

    // 并行处理所有符合条件的文件
    await Promise.all(files.map(async file => {
      if (path.extname(file).toLowerCase() === '.txt') {
        const sourcePath = path.join(sourceDir, file);
        const targetPath = path.join(targetDir, file);
        await fs.rename(sourcePath, targetPath);
        console.log(`已成功移动: ${file}`);
      }
    }));

    console.log('批量移动任务完成!');
  } catch (err) {
    console.error('批量移动过程中出现错误:', err.message);
  }
}

// 执行移动函数
batchMoveTxtFiles();

关键说明

  • 为什么不能直接用fs.rename(./*.txt, ...)?Node.js的fs模块方法不支持解析shell风格的通配符(比如*.txt),通配符解析是操作系统shell的功能,所以我们需要自己遍历目录并筛选文件。
  • 使用path模块处理路径可以避免手动拼接路径时出现的跨系统兼容问题(比如Windows用\,Linux/macOS用/)。
  • 提前创建目标目录可以避免因目录不存在导致的移动失败。

内容的提问来源于stack exchange,提问作者Dan F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:17:39