批处理文件逐行读关键词 遍历目录统计JS文件匹配次数
我来帮你把整个流程完整整合起来!先理清楚核心逻辑:读取键文件、递归遍历JS文件、逐个统计每个键的出现次数,最后输出结果。下面用Node.js实现完整方案,毕竟处理JS文件用它最顺手~
完整实现步骤与代码
1. 核心流程梳理
- 读取键文件(假设每行一个键,比如
foo.bar、lorem.ipsum),过滤空行并去重 - 递归遍历指定目录下所有
.js文件 - 对每个JS文件,用正则匹配每个键的出现次数并累加
- 最后输出每个键的总出现次数
2. 完整代码实现
首先需要安装glob包(用来快速遍历目录文件),执行命令:
npm install glob
然后创建统计脚本key-counter.js:
const fs = require('fs').promises; const path = require('path'); const glob = require('glob'); // 自定义配置,根据你的实际路径修改 const CONFIG = { keyFilePath: './keys.txt', // 你的键文件路径 targetDir: './src', // 要遍历的子目录 ignorePaths: ['**/node_modules/**'] // 可选:忽略不需要遍历的目录 }; async function runKeyCounter() { try { // 第一步:读取并处理键列表 const keyFileContent = await fs.readFile(CONFIG.keyFilePath, 'utf8'); const keys = keyFileContent.split('\n') .map(key => key.trim()) .filter(key => key.length > 0) .filter((key, idx, self) => self.indexOf(key) === idx); // 去重 if (keys.length === 0) { console.log('⚠️ 没有读取到有效键,请检查键文件内容'); return; } // 第二步:获取所有要处理的JS文件 const globPattern = path.join(CONFIG.targetDir, '**/*.js'); const jsFiles = await new Promise((resolve, reject) => { glob(globPattern, { ignore: CONFIG.ignorePaths }, (err, files) => { err ? reject(err) : resolve(files); }); }); if (jsFiles.length === 0) { console.log('⚠️ 目标目录下没有找到.js文件'); return; } // 第三步:初始化统计对象 const countMap = {}; keys.forEach(key => countMap[key] = 0); // 第四步:逐个处理JS文件,统计键的出现次数 for (const file of jsFiles) { const fileContent = await fs.readFile(file, 'utf8'); keys.forEach(key => { // 注意:键里的.是特殊字符,要转义成\.才能精确匹配 const regex = new RegExp(key.replace(/\./g, '\\.'), 'g'); const matches = fileContent.match(regex); if (matches) countMap[key] += matches.length; }); console.log(`✅ 已处理文件: ${file}`); } // 第五步:输出最终统计结果 console.log('\n===== 键出现次数统计结果 ====='); Object.entries(countMap).forEach(([key, count]) => { console.log(`${key}: ${count} 次`); }); } catch (error) { console.error('❌ 执行过程出错:', error.message); } } // 启动脚本 runKeyCounter();
3. 关键细节说明
- 键的正则转义:因为键里的
.在正则中表示任意字符,必须转义成\.才能精确匹配foo.bar这种格式的键 - 异步流程控制:用
async/await替代回调,让整个流程逻辑更清晰,避免回调地狱 - 去重与过滤:自动过滤空行和重复键,避免无效统计
- 可配置项:把路径和忽略目录做成配置,方便你根据实际场景修改
4. 可选优化方向
- 如果要处理超大JS文件,可以改用流式读取,避免内存占用过高
- 支持将统计结果写入到输出文件(比如
results.txt),方便后续查看 - 添加键的模糊匹配规则(如果需要的话)
内容的提问来源于stack exchange,提问作者CCR
相关产品推荐
相关产品推荐

