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

Node.js程序修改需求:当前目录按文件名含指定字符串+扩展名筛选文件

实现文件名包含指定字符串+扩展名筛选的Node.js脚本

没问题,我来帮你调整这段代码,完美实现你想要的功能——固定搜索当前目录,只需要传入文件名包含的字符串和目标扩展名两个参数即可。

完整代码实现

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

// 从命令行参数中提取目标字符串和扩展名
// process.argv前两位是node路径和脚本路径,所以取第三个和第四个参数
const [, , targetString, targetExtension] = process.argv;

// 先做参数校验,避免用户漏传
if (!targetString || !targetExtension) {
  console.error('用法:node 脚本名.js [文件名包含的字符串] [目标扩展名]');
  console.error('示例:node filter-files.js log js');
  process.exit(1);
}

// 固定搜索当前目录
const currentDirectory = './';

// 读取当前目录文件
fs.readdir(currentDirectory, (error, files) => {
  if (error) {
    console.error('读取目录出错:', error.message);
    return;
  }

  // 筛选符合条件的文件
  const matchedFiles = files.filter(file => {
    // 获取文件扩展名(去掉前面的点,比如把".txt"变成"txt")
    const fileExt = path.extname(file).slice(1);
    // 两个条件:文件名包含指定字符串,扩展名匹配
    // 如果需要不区分大小写,可以改成 file.toLowerCase().includes(targetString.toLowerCase()) && fileExt.toLowerCase() === targetExtension.toLowerCase()
    return file.includes(targetString) && fileExt === targetExtension;
  });

  // 输出结果
  console.log(`当前目录下文件名包含"${targetString}"且扩展名为.${targetExtension}的文件:`);
  matchedFiles.forEach(file => console.log(`- ${file}`));
});

关键细节说明

  • 命令行参数处理:通过process.argv获取用户传入的参数,前两个默认是node执行路径和脚本文件路径,所以我们取第3、4位作为筛选条件。
  • 参数校验:如果用户没传够参数,会给出清晰的用法提示,避免程序无意义报错。
  • 筛选逻辑:
    • file.includes(targetString):精准匹配文件名中是否包含指定字符串(区分大小写,如需忽略大小写可以改成大小写统一后再判断)
    • path.extname(file).slice(1):用Node.js内置的path模块处理扩展名,确保跨平台兼容性,同时去掉扩展名前面的点,方便和用户传入的参数(比如txt而非.txt)匹配。
  • 错误处理:捕获目录读取失败的情况(比如权限不足),给出友好的错误提示。

使用示例

比如你要找当前目录下文件名包含log且扩展名为.js的文件,只需要在终端运行:

node filter-files.js log js

程序就会输出符合条件的文件列表啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:34:41