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

PowerShell搜索时同时列出匹配与未匹配字符串的脚本修改方法

PowerShell脚本修改方案

原脚本仅会输出Select-String命中的搜索结果,未命中的关键词不会进入结果流,修改核心逻辑是先收集全量命中结果,再对比关键词全量列表补全未命中项,同时统一输出格式。

修改后完整代码

# 读取所有待搜索的关键词
$searchWords = Get-Content "C:\Directory containing file\Text_To_Search_For.txt"

# 递归遍历根目录下所有文件,执行关键词匹配,结果存入变量
$matchResults = Get-Childitem -Path "C:\Start my search here\" -Recurse -File | 
  Select-String -Pattern $searchWords | 
  Select Filename, Line, @{n='SearchWord';e={$_.Pattern}}, LineNumber

# 提取所有已经命中过的去重关键词,对比得到完全未匹配的关键词
$matchedWords = $matchResults.SearchWord | Select-Object -Unique
$unmatchedWords = Compare-Object -ReferenceObject $searchWords -DifferenceObject $matchedWords |
  Where-Object SideIndicator -eq '<=' |
  Select-Object -ExpandProperty InputObject

# 为未匹配关键词构造和命中结果同结构的条目
$unmatchResults = $unmatchedWords | ForEach-Object {
  [PSCustomObject]@{
    Filename   = '未匹配到任何文件'
    Line       = '无匹配行内容'
    SearchWord = $_
    LineNumber = '无匹配行号'
  }
}

# 合并两类结果输出,可直接导出为CSV留存
$finalReport = $matchResults + $unmatchResults
$finalReport

# 如需导出CSV报告,取消注释下面行即可
# $finalReport | Export-Csv -Path "C:\搜索结果报告.csv" -NoTypeInformation -Encoding UTF8

关键改动说明

  • 给Get-ChildItem增加-File参数,跳过目录对象,避免Select-String处理目录时抛出错误
  • 将命中结果存入变量暂存,避免重复遍历文件浪费性能
  • 通过对比全量关键词和已命中关键词的差集,得到所有未匹配的搜索词
  • 未匹配项的字段结构和命中项完全对齐,后续导出、筛选不需要额外做格式适配
  • 可选加导出CSV的逻辑,直接生成可打开的结构化报告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:48:16