系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

findstr

在文件中按文本或受限正则搜索,支持递归和行号。

补充说明

findstr 在文件里逐行查找字符串或正则表达式,适合在日志中定位错误、在源码树里找 TODO、在配置文件中检查某个键。它支持递归(/s)、忽略大小写(/i)、显示行号(/n)、只输出文件名(/m)、反向匹配(/v)和从文件读取模式(/g),默认把搜索串当正则处理。

边界:findstr 的正则能力有限,只支持文档列出的元字符(.、*、^、$、字符类、\<、\> 等),不要直接套用 grep -E 的 +、?、| 和分组。多个搜索串用空格分隔表示“或”,要搜带空格的整句必须用 /c:"..."。只做字面搜索可用 /l;按文件名查找用 where,交互式筛选用 PowerShell Select-String。

Windows 10/11 与 Server 2016+ 的 findstr 参数一致,CMD 和 PowerShell 都调用 findstr.exe。文件编码会影响匹配:UTF-16、无 BOM 的 UTF-8 或其它代码页文件可能漏匹配,可先用 type 或 PowerShell 确认编码,再决定是否转换。

常用示例

# 1. 在日志中忽略大小写查找并显示行号
C:\> findstr /I /N "timeout" C:\logs\app.log

# 2. 递归搜索源码,只输出包含 TODO 的文件名
C:\> findstr /S /I /M "TODO" C:\src\*.cs

# 3. 用正则匹配行首的 ERROR,并显示行号
C:\> findstr /R /N "^ERROR" C:\logs\*.log

# 4. 搜索两个带空格的短语,每个短语用 /C 包起来
C:\> findstr /C:"connection refused" /C:"timed out" C:\logs\app.log

# 5. 反向过滤,把不含 debug 的行另存
C:\> findstr /V /I "debug" C:\logs\app.log > C:\temp\app-nodebug.log

# 6. 从模式文件读取多个关键词,递归搜索文本
C:\> findstr /G:C:\temp\patterns.txt /S C:\src\*.txt

# 7. 给文件加行号,配合通配符查看匹配上下文
C:\> findstr /N "^" C:\temp\config.ini

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. findstr hello there x.y 是搜整句还是搜两个词?整句怎么写?
  2. 为什么直接搜索 1.2 或带反斜杠的路径可能得到意外结果?
  3. 脚本怎样区分“没有匹配”和“命令出错”?
答案
  1. 搜两个词,任意一个命中即可;整句用 /c:"hello there"。
  2. 默认按正则解释,. 等是元字符;用 /l 或 /c: 转成字面量。
  3. 0 有匹配、1 无匹配、2 出错;分别判断,不要只用 if errorlevel 1。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令