在文件中按文本或受限正则搜索,支持递归和行号。
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
findstr hello there x.y 匹配含 hello 或 there 的行;要搜整句用 /c:"hello there"。1.2、C:\path 等含元字符的文本会被意外匹配;用 /l 或 /c: 固定为字面量。+、?、|、分组等扩展语法,复杂模式要么拆成多个 /c:,要么改用 PowerShell Select-String。/s 会遍历整棵子树,目录大时很慢;先缩小路径和文件模式,必要时用 /d:dir1;dir2 限定目录。if errorlevel 1 会把“无匹配”和“出错”混在一起。/p 跳过非打印字符,或先转换编码再搜索。合上页面,先回答,再展开对照。
findstr hello there x.y 是搜整句还是搜两个词?整句怎么写?1.2 或带反斜杠的路径可能得到意外结果?/c:"hello there"。. 等是元字符;用 /l 或 /c: 转成字面量。if errorlevel 1。
小程序版
微信扫码,随时查命令