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

如何在PowerShell中用findstr查找同时含两个字符串的文件?

查找同时包含两个字符串的.txt文件的正确方法

为什么你之前的命令失效:

  • findstr /c:"String: A" /c:"String: B" *.txt 采用OR逻辑,只要文件包含其中任意一个字符串就会返回,不符合“同时包含”的要求。
  • 管道命令错误:你在第二个findstr后加了*.txt,导致它重新扫描所有文件,而非处理管道传来的结果,正确写法应去掉这个参数。
  • 正则命令findstr /r /c:"String: A.*String: B" *.txt仅匹配A在B之前且同一行连续出现的情况,若两行分开或顺序相反则无效,且findstr不支持跨行正则匹配。

正确解决方法

方法1:修正findstr管道命令

利用管道实现AND逻辑,先筛选包含第一个字符串的文件,再在这些文件中筛选包含第二个字符串的,同时用/m参数只输出文件名:

findstr /m /c:"String: A" *.txt | findstr /m /c:"String: B"

方法2:PowerShell原生命令(推荐)

用PowerShell的Select-String更灵活地检查双条件,效率也更高:

Get-ChildItem -Filter *.txt | Where-Object {
    (Select-String -Path $_.FullName -Pattern "String: A" -Quiet) -and
    (Select-String -Path $_.FullName -Pattern "String: B" -Quiet)
} | Select-Object -ExpandProperty Name
  • -Quiet参数让Select-String仅返回布尔值(是否找到匹配),避免输出冗余内容。
  • -and确保两个字符串都存在于文件中。

方法3:处理跨行/任意顺序的情况

如果两个字符串可能不在同一行,可读取整个文件内容进行检查:

Get-ChildItem -Filter *.txt | Where-Object {
    $content = Get-Content $_.FullName -Raw
    $content -match "String: A" -and $content -match "String: B"
} | Select-Object -ExpandProperty Name

-Raw参数将文件内容作为单个字符串读取,支持跨行匹配检查。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:17:22