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
相关产品推荐
相关产品推荐

