批处理之find和findstr

1. find

在一个文件或多个文件中搜索指定的文本字符串。当搜索指定的文件后,find 将显示出包含指定字符串的所有行。

1.1. 语法及注释

find [/v] [/c] [/n] [/i] "string" [[Drive:][Path]FileName[...]]
  • /v
    显示所有不包含指定 string 的行。

  • /c
    计算包含指定 string 的行并显示总数。

  • /n
    将文件行号置于每行开头。

  • /i
    指定搜索不区分大小写。

  • "string"
    必需。指定要搜索的字符组。必须将 string 包含在引号之内(即,“string”)。

  • [Drive:][Path] FileName
    指定要在其中搜索指定字符串的文件的位置和名称。

  • /?
    在命令提示符显示帮助。

1.2. 用法

  • 指定字符串
    如果不使用 /i,find 将精确搜索指定的字符串。例如,find 命令认为字符“a”和“A”是不同的。但是,如果使用 /i,find 不区分大小写,并将“a”和“A”视为同一个字符。如果要搜索的字符串包含引号,必须对包含在字符串中的单引号用双引号引起来,即"StringContaining"“QuotationMarks”。

  • 将 find 用作筛选器
    如果省略文件名,find 将用作筛选器,从标准输入源(通常是键盘、管道或重定向的文件)得到输入,然后显示任何包含字符串的所有行。

  • 命令语法次序
    可以按任何顺序键入 find 命令的参数和命令行选项。

  • 使用通配符
    在用 find 命令指定的文件名或扩展名中不能使用通配符(* 和 ?)。要搜索使用通配符指定的一组文件中的字符串,可以在 for 命令中使用 find 命令。

  • 将 /v 或 /n 与 /c 一起使用
    如果在相同的命令行中指定 /c 和 /v ,find 将显示不包含指定字符串的行数。如果在相同的命令行中指定 /c 和 /n,find 将忽略 /n。

  • 在 find 中使用回车
    find 命令不能识别回车。当使用 find 在包含回车的文件中搜索文本时,必须将搜索字符串限制在可以在两个回车之间找到的文本,也就是不能被回车中断的字符串。例如,“tax”与“file”之间出现回车时,find 不会报告找到“tax file”字符串。

1.3. 示例

rem 在当前目录中的文件ben.txt中查找字符串"the pencil",并显示行号
find /n "the pencil" ben.txt
rem 字符串中包含引号,需要使用双引号
find "this is ""pencil""" ben.txt
rem 查找指定目录中的包含指定字符串的文件名
rem dir d:\test /b /s是显示指定目录中的所有文件然后通过|(管道号)将内容作为参数传递给find
dir d:\test /b /s | find ".exe"
rem 将结果输出到文件s.txt
find /n "the pencil" ben.txt > s.txt
rem <是重定向,可以重定向为管道、文件等,重定向为文件和指定文件作用相同。>将结果存在当前目录的s.txt中。
find /n "the pencil" < ben.txt > s.txt

2. findstr

find方法功能相对简单,如果需要更复杂的搜索,可以使用支持正则表达式的findstr。

2.1. 语法及注释

findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/offline] [/g:file] [/f:file] 
[/c:string] [/d:dirlist] [/a:ColorAttribute] [strings] [[Drive:][Path] FileName [...]]
  • /b
    如果位于行的开头则匹配模式。

  • /e
    如果位于行的末尾则匹配模式。

  • /l
    使用文字搜索字符串。

  • /r
    使用搜索串作为常规表达式。Findstr 将所有元字符解释为常规表达式,除非使用了 /l。

  • /s
    在当前目录和所有子目录中搜索匹配的文件。

  • /i
    指定搜索不区分大小写。

  • /x
    打印完全匹配的行。

  • /v
    只打印不包含匹配的行。

  • /n
    在每个匹配的行之前打印行号。

  • /m
    如果文件包含匹配项,仅打印该文件名。

  • /o
    在每次匹配行之前打印查找偏移量。

  • /p
    跳过包含非可打印字符的文件。

  • /offline
    利用脱机属性设置处理文件。

  • /f:file
    从指定文件中读取文件列表。

  • /c:string
    使用指定的文本作为文字搜索字符串。

  • /g:file
    从指定文件得到搜索字符串。

  • /d:dirlist
    搜索以逗号分隔的目录列表。

  • /a:ColorAttribute
    使用两个十六进制数指定颜色属性。

  • strings
    指定要在 FileName 中搜索的文本。

  • [Drive:][Path] FileName […]
    指定要搜索的文件。

  • /?
    在命令提示符显示帮助。

2.2. 用法

findstr支持正则表达式。
Findstr 可以在任何 ASCII 文件或文件中精确查找所要查找的文本。然而,有时要匹配的信息只有一部分或需要查找更宽广的信息范围。在这种情况下,findstr 具有使用常规表达式搜索各种文本的强大功能。
正则表达式是用于指定文本类型的符号,与精确的字符串相反。标记使用文字字符和元字符。每个在常规的表达式语法中没有特殊意义的字符都是文字字符,与出现的该字符匹配。例如,字母和数字是文字符号。元字符是在正则表达式语法中具有特殊意义(操作符或分隔符)的符号。
下表列出 findstr 接受的元字符。

字符
.通配符:任何字符
*重复:以前字符或类的零次或多次出现
^行位置:行的开始
$行位置:行的结尾
[class]字符类:集合中任何一个字符
[^class]反类:不在集合中的任何一个字符
[x-y]范围:范围:指定范围内的任何字符
\x取消:元字符 x 的文字用途
\<xyz字位置:字首
xyz\>字位置:字尾

2.3. 示例

rem 除非有前缀/C,请使用空格隔开搜索字符串,如果搜索hello或there
findstr "hello there" abc.txt
rem 在文件中搜索"hello there"
findstr /c:"hello there" abc.txt
rem 区分大小写,搜索Windows
findstr Windows abc.txt
findstr "Windows" abc.txt
rem 搜索当前目录及所有子目录中的每个文件
findstr /s Windows *.*
rem 搜索当前目录中所有txt文件中的包含"for"的所有行(前面可以有任意个字符包含空格)
findstr /n ".for" *.txt
rem 搜索指定文件中以for开头的字符串,将结果存在指定文件中
findstr /n "for*" a.txt > result.txt
rem 显示搜索的结果是否成功,0表示成功,1表示失败
echo %errorlevel%
rem 更多用法参考正则表达式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值