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

Node.js递归遍历文件夹筛选.html/.htm/.aspx后缀的文件

遍历筛选指定后缀文件的修改方案

问题根源

当前代码的过滤逻辑是基于固定文件名白名单做匹配,仅识别代码里写死的index.html、default.htm这类特定命名的文件,没有校验文件本身的扩展名属性,因此无法返回其他同后缀但命名不同的文件。

具体修改调整

  • 移除原代码中存储固定文件名的filenames集合,替换为存储目标扩展名的匹配集合
  • 调用Node.js内置path模块的extname()方法直接提取文件扩展名,替代手动拆分字符串取文件名的逻辑,避免Windows路径反斜杠适配、路径分段错误等兼容问题
  • 统一将提取到的扩展名转为小写后做匹配,兼容Demo.HTML、Test.HTM这类大小写混合的文件命名

修改后完整代码

// 原有遍历逻辑无需调整,可直接保留
async function getAllFile(folderPath) {
  let files = await fs.readdir(folderPath);
  files = await Promise.all(
    files.map(async (file) => {
      const filePath = path.join(folderPath, file);
      const stats = await fs.stat(filePath);
      if (stats.isDirectory()) {
        return getAllFile(filePath);
      } else if (stats.isFile()) return filePath;
    })
  );
  return files.reduce((all, folderContents) => all.concat(folderContents), []);
}

// 替换原固定文件名匹配逻辑
const targetExtSet = new Set([".html", ".htm", ".aspx"]);

const filterFiles = async (folderPath) => {
  const allPaths = await getAllFile(folderPath);
  return allPaths.filter((filePath) => {
    // 提取文件扩展名并统一转小写匹配
    const fileExt = path.extname(filePath).toLowerCase();
    return targetExtSet.has(fileExt);
  });
};

效果说明

调整后的逻辑不限制文件本身的命名,只要文件后缀是三个目标后缀之一,不管是test.html、news.htm、product.aspx都会被正常返回,完全覆盖所有满足扩展名要求的文件。同时内置方法取扩展名的逻辑,不存在路径分隔符兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 06:54:04