当前位置:网站首页>【批处理DOS-CMD命令-汇总和小结】-字符串搜索、查找、筛选命令(find、findstr),Find和findstr的区别和辨析

【批处理DOS-CMD命令-汇总和小结】-字符串搜索、查找、筛选命令(find、findstr),Find和findstr的区别和辨析

2022-07-06 17:01:00 dssgresadfsrgre

一、find命令

1.1 打印find命令的帮助信息

执行命令【find /?】。

C:\Users\Administrator>find /?
在文件中搜索字符串。

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

  /V         显示所有未包含指定字符串的行。
  /C         仅显示包含字符串的行数。
  /N         显示行号。
  /I         搜索字符串时忽略大小写。
  /OFF[LINE] 不要跳过具有脱机属性集的文件。
  "string" 指定要搜索的文本字符串。
  [drive:][path]filename
             指定要搜索的文件。

如果没有指定路径,FIND 将搜索在提示符处键入
的文本或者由另一命令产生的文本。

1.2 字段string和filepath的语法

find 命令不能识别回车。当使用 find 在包含回车的文件中搜索文本时,必须将搜索字符串限制在可以在两个回车之间找到的文本,也就是不能被回车中断的字符串。例如,“tax”与“file”之间出现回车时,find 不会报告找到“tax file”字符串。换句话说,find仅仅针对位于同一行上的字符串,不能查找跨行的字符块。

要查找将文字包含在引号之内的字符串,必须首先将整个字符串用引号围绕起来。其次,每个包含在字符串内的引号必须使用两个双引号括起来。要在 Report.doc中查找【abc"def"gh】,请键入:

find "abc""def""gh" report.doc

如果想要多重条件筛选,在文本文件中查找既包括字符串A又包括字符串B的行,可借助管道符,具体见本文的1.8小节。

字段string不支持通配符,如果想要搜索包括字符串A或字符串B的行,可以借助for命令。

for %f in (abc def) do find "%f" test.txt

字段filepath支持通配符,至于为啥网上有些文章说不支持,需要搭配for命令语句使用,我也不是很清楚,可能是因为cmd版本迭代的缘故吧!

详见1.3.2小节查看字段filepath的通配符用法。 

1.3 最基本用法:find "string" filepath
 

 在某文本文件,或一堆文本文件中搜索一个字符串所在行的信息。

1.3.1 在单个文件中查找英文字符

例如,查找tool.txt文本文件中存在字符串【AA】的行。

 执行命令【find "AA" tool.txt】,结果如下所示(如果文本文件中有中文,需要用命令chcp 65001先切换至utf8编码,不然结果显示乱码)。

1.3.2 在多个文件中查找中文字符 

在决定要查找中文字符前,一定要用chcp 65001开启utf8编码,不然搜索不到。

命令 find的string字段不支持通配符,也即如果执行【find "A?" tool.txt】,最后不会显示任何行中有"A?",因为把问号当成普通问号处理了。

但是filepath字段支持通配符,也即如果执行 【find "朝朝" tool*.txt】,最后会显示所有以tool开头命名的txt文件。

1.4 不区分大小写——参数/i

默认是区分大小写的,当加了参数/i后就不区分了。

在上面1.2节的文本文件基础上,执行命令【find /i "aa" "tool?.txt"】,结果如下。

参数/i可以和其他任何参数配合,不会有逻辑上的矛盾与冲突。

1.5 搜索不包括指定字符串的行——参数/v

默认搜索包括指定字符串的行,当加了参数/v后就反向搜索。

在上面1.2节的文本文件基础上,执行命令【find /v "AA" "tool.txt"】,结果如下。

参数/v可以和其他任何参数配合,不会有逻辑上的矛盾与冲突。

1.6 添加行标号——参数/n

默认不标号,仅仅显示所在行的文本内容,当加了参数/n后就额外标号(不是仅标号)。

在上面1.2节的文本文件基础上,执行命令【find /n "AA" "tool.txt"】,结果如下。

 参数/n可以和其他任何参数配合,不会有逻辑上的矛盾与冲突。

1.7 仅显示目标行的数目——参数/c

默认仅仅显示所在行的文本内容,当加了参数/c后就仅显示存在字符串的行数量。

c是count的简写,表示计数。

在上面1.2节的文本文件基础上,执行命令【find /c "AA" "tool.txt"】,结果如下。

参数/c除了和参数/n矛盾,其他都不矛盾。如果实在有些人写的时候把这两个参数全部添加上去了,不管顺序如何,最终只有参数/c会生效。

帮助信息对参数/c的文字描述有毛病,更准确来说应该是【仅显示行数】,因为它可以和参数/v一起搭配,表示【仅显示未包括字符串的行数】,执行【find /c /v "AA" "tool.txt"】的结果如下。

1.8 配合管道命令(管道符)使用

管道符左边语句的输出结果,会输入给右边语句。

find支持同管道符配合使用,如果管道符右边是find语句,那么左边的输出字符串文本就会作为右边find语句的查找对象。

find "abc" test.txt | find "xyz"

上面这句表示在test.txt中查找同时存在字符串abc和字符串xyz的行,即实现多重过滤

1.9 作为实时筛选器搜索在线键入字符串

关于实时筛选器,在1.1小节打印的帮助信息如是所言↓↓↓↓

如果没有指定路径,FIND 将搜索在提示符处键入的文本或者由另一命令产生的文本。

也就是说,不给文本文件路径、也不连接在管道符的终端,就只能用键盘实时输入的字符串行了。

执行命令【find "abc"】,光标换行在头端闪烁。 

随便打一个没有abc的字符串行——【123456789】,然后回车。

在打一个有abc的字符串行——【I miss you, abc!】,然后回车。

可以发现,这一行字符串又原封不动地被输出,说明它通过了“严峻的考验”,哈哈哈哈...

进入之后,如何退出筛选器呢?用快捷键【ctrl+c】,命令【exit】不能退出。

二、findstr命令

findstr命令比find命令还要强大,因为它还支持正则表达式,称得上“强者中的强者”。

2.1 打印findstr命令的帮助信息

C:\Users\Administrator>findstr /?
在文件中寻找字符串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

  /B         在一行的开始配对模式。
  /E         在一行的结尾配对模式。
  /L         按字使用搜索字符串。
  /R         将搜索字符串作为一般表达式使用。
  /S         在当前目录和所有子目录中搜索匹配文件。
  /I         指定搜索不分大小写。
  /X         打印完全匹配的行。
  /V         只打印不包含匹配的行。
  /N         在匹配的每行前打印行数。
  /M         如果文件含有匹配项,只打印其文件名。
  /O         在每个匹配行前打印字符偏移量。
  /P         忽略有不可打印字符的文件。
  /OFF[LINE] 不跳过带有脱机属性集的文件。
  /A:attr    指定有十六进位数字的颜色属性。请见 "color /?"
  /F:file    从指定文件读文件列表 (/ 代表控制台)。
  /C:string  使用指定字符串作为文字搜索字符串。
  /G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)。
  /D:dir     查找以分号为分隔符的目录列表
  strings    要查找的文字。
  [drive:][path]filename
             指定要查找的文件。

除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找
"hello there"。

一般表达式的快速参考:
  .        通配符: 任何字符
  *        重复: 以前字符或类出现零或零以上次数
  ^        行位置: 行的开始
  $        行位置: 行的终点
  [class]  字符类: 任何在字符集中的字符
  [^class] 补字符类: 任何不在字符集中的字符
  [x-y]    范围: 在指定范围内的任何字符
  \x       Escape: 元字符 x 的文字用法
  \<xyz    字位置: 字的开始
  xyz\>    字位置: 字的结束

有关 FINDSTR 常见表达法的详细情况,请见联机命令参考。

(1)对/d:dir的补充说明,原帮助信息不太直观,举个例子【/d:dir1;dir2;dir3】。

(2)对参数/r的补充说明,现在默认是可以不加,不加string也会被识别成正则表达式(一般表达式)的。可能原先是只有加了这个参数字段strings才算是正则表达式,而改版之后这个参数还留着。属于历史遗留问题。

2.2 字段strings和参数/r、参数/g:file

2.2.1 字段strings和参数/c:string

字段strings是用来指定搜索字符串的,不知道大家注没注意到这个单词是复数形式?

其实这意味着字段strings允许包括多个字符串,各个字符串之间用空格划分开,例如【abc def ghi】,就是分别搜索【abc】、【def】、【ghi】,对于某一行只要搜到了其中之一,就会通过。

如果字段strings只有一个字符串(没有空格、也没有特殊符号), 就可以不加引号。

如果字段strings是由空格分隔的多个字符串,或者单个字符串中有特殊符号(比如&),就需要加引号。

而参数/c:string的名词形式是单数,这也意味着一旦加了参数/c,就只能搜索单个字符串,具体详见本文的2.4.2小节。 

字段strings和参数/c:string,都支持正则表达式(通配符更不在话下),详见下一章节。

2.2.2 正则表达式和参数/r

在findstr命令语句中,支持的典型正则表达式规则如下:

.        通配符: 任何字符
*        重复: 以前字符或类出现零或零以上次数
^        行位置: 行的开始
$        行位置: 行的终点
[class]  字符类: 任何在字符集中的字符
[^class] 补字符类: 任何不在字符集中的字符
[x-y]    范围: 在指定范围内的任何字符
\x       Escape: 元字符 x 的文字用法
\<xyz    字位置: 字的开始
xyz\>    字位置: 字的结束

 上面这10个符号是“元字符”,是在正则表达式语法中具有特殊含义 (运算符或分隔符) 的符号。

(普通的)“文本字符”是在正则表达式语法中没有特殊含义的字符,是匹配字符串的的基本项。 例如,26个字母和10个数字都是原义字符(文本字符)。

(1)通配符和重复符(.、*)

【.】号是通配符,代表一个任意字符。

【*】号是重复符,在正则表达式中不是代表任意字符,而是左侧字符或者表达式的重复次数,【*】号表示重复的次数为零次或者多次。

【.*】表示任意字符,可以是零个字符,也可是多个。

下面给出通配符和重复符的经典应用案例。

仅有【.】号时,【.】号的数量表示匹配行的最小字符数量,例如【.】匹配的是有至少一个字符的行,而【.....】匹配的是至少有5个字符的行。

从文件tool.txt中查找任意字符,不包括空字符或空行,可以执行命令【findstr . tool.txt】或【findstr "." tool.txt】。

从文件tool.txt中查找任意字符,包括空字符和空行,可以执行命令【findstr .* tool.txt】或【findstr ".*" tool.txt】。

(2)查找字符集中的任意字符([class]、[^class]、[x-y])

class形式表示可离散独立地分列,例如【aef】;减号表示取ASCII编码在左右符号之间的字符,例如[e-h]表示取从e到h之间的字母(不区分大小写);而^表示后面字符集的补集。

一般只能用ASCII字符(不能是中文字符);另外对于某些特殊字符,需要转义。

对于英文引号【"】,需要转义;如果是单个英文引号,就写成【"""】,也即["""]。

对于减号【-】不需要转义,直接写成离散形式就行,比如[-a-z]表示匹配任意字母外加一个减号。

如果在字符集内插入通配符【.】和重复符【*】,将会把【.】和【*】视为普通字符,没有通配和重复的含义。

从文件tool.txt中查找包括a、b、c、e、z、y字母的字符串或行,可执行命令【findstr "[abcezy]" tool.txt】。

从文件tool.txt中屏蔽不符合规则的字符串或行,如果是纯数字的字符串或者行便过滤掉不显示(例如237623),而如果是带有非数字字符就保留(比如34yht888),可执行命令【findstr "[^0-9]" tool.txt】。

从文件tool.txt中查找小写字符a-f,l-z的字符串,也即不包含g h I j k这几个字母,可执行命令【findstr "[a-fl-z]" tool.txt】。

从文件tool.txt中查找包括任意数字的字符串或行,可执行命令【findstr "[0-9]" tool.txt】。

从文件tool.txt中查找包括任意字母的字符串或行,可执行命令【findstr "[a-z]" tool.txt】,注意不需要写成【findstr "[a-zA-Z]" tool.txt】,因为如果是x-y的形式,默认就不区分大小写了。而如果是类似[abc]这种离散的形式,还是区分大小写的。

从文件tool.txt中匹配由两个字符集组合而成的诸如MahY , MbiY, MahY等…..,可执行命令【findstr "M[abc][hig]Y" tool.txt】。

(3)行首行尾和词头词尾(^、$、\<、\>)

在帮助信息中,“字”对应英文原型word,因此中文翻译“字还可替换成“单词”,在小标题中直接用词头词尾增强直观性。

行锚符是^和$,分别对应行头和行尾,词锚符是\<和\>,分别对应词头和词尾。

行的头与尾,也即起始位置和终止位置,理解起来很容易。

下面举一个例子,帮助大家理解行的头与尾锚符。

^表示行头,"^step"仅匹配"step hello world"中的第一个单词;$表示行尾,"step$"仅匹配 "hello world step"中最后一个单词。

下面举一个例子,帮助大家理解词的头与尾锚符。

文本文件【tool.txt】里有两行为"abcd" 和 "abcd e"。

执行命令【findstr "cd\>" tool.txt】,两行都会出现,只要是连在一起(没被空格开)的并以cd结尾的(不要求是行尾)都满足,相当于以cd结尾的单词所在行都会被查出来。

这两个行首行尾锚符,常常用来筛选出纯数字或纯字母。

譬如想要筛选tool.txt文本文件中的纯数字字符串或行,可执行命令【findstr "^[0-9]*$" tool.txt】,

例如【675758345】会被保留,而【46752kkjl4】就被过滤掉了。 

譬如想要筛选tool.txt文本文件中的纯字母字符串或行,可执行命令【findstr "^[a-z]*$" tool.txt】,

例如【hythdfgdgiuf】保留,而【956sdsftgruylk】、【1321argad13】就被过滤掉。

行首行尾锚符【^、$】配合重复符【*】,实现匹配多个数量符号的字符串或行

如果在搜索字符串里没有【*】号,也就是说不重复左侧的搜索条件。

例如【^[0-9]】匹配的是行头是数字的任意字符串或行,而【[a-zA-Z]$】匹配的是行尾是字母的任意字符串或行。

而如果行首行尾锚符同时添加,也即行首行尾同时受限制,那么有几个中括号就对应有几个字符。例如【^[0-9]$】仅会匹配到只有一个数字的行,而【^[0-9][A-Za-z]$】仅会匹配到第一个字符是数字、第二个字符是字母的行。

(4)元字符的转义——/x(escape表示转义)

上面我们提到元字符包括通配符【.】、重复符【*】、任一符【[】和【]】、连续符【-】、补集符【^】、行首行尾锚符【^】和【$】、词首词尾符【/<】和【>/】。

如果把元字符比作x,那么如果我们要匹配元字符的普通文本形式,可以用【/x】;例如对连续符【-】的转义,对应的是【/-】。

另外在本文会啰嗦很多次的一点——对于双引号的转义,用双引号,也即【"】需转义成【"""】,【abc"def】需写成【abc"""def】。

对于正斜杠符【/】的转义,同双引号一样,用它自身来解决,也即【/】需转义成【//】。

2.2.3 字符串批量搜索的参数/g:filepath

参数/g后的filepath是一个文本文件,其中每一行代表一个搜索字符串。

由tool.txt文件稍加改变,生成goal.txt文件。

而后,再执行命令【findstr /g:goal.txt tool.txt】,结果如下,最后搜到两个匹配行。

2.3 字段filepath和参数/d:dir1;dir2、参数/f:file、参数/s

2.3.1 搜索位置——字段filepath

本节的filepath指的就是帮助信息中的字段[[drive:][path]filename[ ...]],属实简化版本了!

字段strings指定了搜索字符串,也即搜什么的问题;而字段filepath指定了搜索位置,也即在哪里搜的问题。

既可以采用绝对路径,也可以采用相对路径。

不仅可以搜索单个文本文件,也可搜索多个文本文件,此时不同文件的路径字符串间需用空格划开。

另外filepath也支持通配符【*】和通配符【?】。

例如执行命令【findstr /r "abc dedgth.t" tool?.txt】,最后结果中包括了tool.txt和too1.txt的信息。

再比如执行命令【findstr /r "abc" *.*】或【findstr /r "abc" "*.*"】,会在当前目录所有文件搜索是否有字符串abc。

2.3.2 在一个或多个目录中搜索——参数/d:dir1 dir2 dir3

这个参数的使用方法,按帮助信息里写的去编写代码,理应很简单就可以实现,但是最后却无法有效地看到预期效果。

先执行命令【findstr /r /s "AA" *.*】,查找当前目录及其所有子目录下的文件中含有AA的行。

再执行命令【findstr /r /s "AA" /d:dir1;dir2】, 却报错无法找到目录。

改成绝对目录,执行【findstr /r "AA" /d:D:\D-desktop\test5\dir1;D:\D-desktop\test5\dir2】,也还是不行。

---------------------更新分割线----------------------------

经过一番探索,本人终于领会了。

原来参数/d:dir1;dir2;dir3不能放在strings的后面;原来即使添加了参数/d:dir1;dir2;dir3,也必须要给出filepath的匹配规则。

因此其实参数/d:dir1;dir2;dir3给出的只是起始搜索目录,当添加这个参数时,默认以CMD当前目录作为起始搜索目录;起始搜索目录指的是子目录的“起点”。

而之所以还要指定filepath匹配规则,是因为避免目录内存在太多非文本文件,这样搜索时极其耗时耗力,另外也可提高了匹配规则的多样性和匹配的精准程度。

执行命令【findstr /r /d:dir1;dir2;dir3 "AA" *.*】后,结果如下,非常成功!!!

2.3.3 借文本文件提供的路径(目录)来搜索——参数/f:file

新建一个文本文件,内容如下,前3行都是文件的相对路径,最后一行是一个相对目录路径

接着,指定的文件路径我们不用管,但是目录路径的话是不是像2.3.2小节一样需要在后面指定匹配规则呢?

不妨试试,我们执行命令【findstr /r /f:paths.txt "AA" "*.*"】,结果如下

而如果不指定匹配规则,执行命令 【findstr /r /f:paths.txt "AA"】,最后就没有当前目录的搜索结果了。

 

后来,我反思自己,是不是参数/f:filepath不支持目录路径呢?回过头看帮助信息,“读文件列表”而不是读文件夹列表,所以官方的意思应该也是不支持在里面读文件夹的。

/F:file    从指定文件读文件列表 (/ 代表控制台)。

2.3.4 搜索范围纵向深入,扩展至子目录——参数/s

如果不添加参数/s,执行命令【findstr /r "AA" *.*】,只能查找当前目录下所有符合规则的文件。

先执行命令【findstr /r /s "AA" *.*】,查找当前目录及其所有子目录下的文件中含有AA的行。

2.4 搜索方式参数/b、/e、/c、/l、/i、/x、/v、

2.4.1 行首行尾定位参数——参数/b、/e

本节的定位参数的功能实际上和正则表达式的元字符【^】、【$】功能完全相同,都是将搜索字符串只能紧靠行首或者行尾进行搜索和匹配。

例如加了参数/b,就必须把搜索字符串放在行首匹配,而某行内容是【rfgwercd fwerfreg】,我们可以用命令【findstr /l "fwerf" tool.txt】查找到这行,但是不能用命令【findstr /l /b "fwerf" tool.txt】查到。

同理,参数/e作为行尾定位参数,执行机制也很简单。

参数/b和参数/e可以同时添加,因为并不冲突,一个搜索字符串既可以贴近行头也可以作为行尾。

2.4.2 搜索字符串带空格时,需添加参数/c

如果搜索字符串有空格,比如说【A B C】,那么cmd程序默认情况下会在搜索源中依次搜索字符串【A】、【B】、【C】,只要发现有其中一个符合规则,就会通过。

但是若我们要搜索的字符串本身带有空格, 换句话说需要连带空格一起搜索呢?

就需要用到参数/c了,并且需要写成/c:string的形式。我们可以把c看成connect的缩写,空格两边字符串连接成一个整体,这样记忆参数/c更加牢固。

以命令【findstr /c:"ab c" tool.txt】为例,最后搜索到的应该是确实包括【ab c】的字符串或行;而如果不加参数/c,写成【findstr "ab c" tool.txt】,那么类似【abasdref】、【cdsagrgtr】的字符串或行也会被通过。

2.4.3 将字符串当做单词进行搜索——参数/l

这个参数我并没有搞明白怎么用。

如果搜索字符串是一个单词的部分或全部,而这个单词在某一行出现,那这一行照理的确是被通过的。

而如果搜索字符串中有空格,也即存在多个单词,这时候会对其进行分别搜索,只要某一行中字符串又正好有这多个单词之一(部分匹配或完全匹配),就会被通过。

参数/l可不可以与参数/c搭配?试试执行命令【findstr /l /c:"wercd fwerf" tool.txt】,执行结果如下。也是会通过,这一点我特别纳闷,因为既然按单词来搜索,一个单词不可能有空格,那搜索字符串中有空格又被参数/c限制成一个整体,最后反而要把它当做一个单词,岂不荒谬?

从上面的测试中,我看不到任何添加参数/l的意义,感觉加不加都一样。

2.4.4 整行匹配,行首行尾贴近——参数/x

什么叫整行匹配?也即要搜索的字符串占一行,而不是部分。

由此也易得,这种匹配模式其实和行首行尾匹配相同,也即下面3条命令的执行结果完全一样。

findstr /e /b "fg" tool.txt

findstr /x "fg" tool.txt

findstr "^fg$" tool.txt

2.4.5 不区分大小写——参数/i

findstr命令语句默认区分大小写,如果想要不区分,可以加参数/i。

参数i是ignore的简写,表示忽略,忽略掉大小写问题,不就是不区分大小写吗?

执行命令【findstr /i "aa" tool.txt】,最后搜出来的结果中有AA。

2.4.6 搜索目标字符串的补集——参数/v

默认是搜什么,输出(显示)什么,此时是选择要什么;但是有一种情况是目标不能输出(显示),此时是选择不要什么。

添加参数/v,执行命令【findstr /v "AA" tool.txt】,那些带有AA字符串的行都会被丢弃。

2.5 显示选项参数/m、/n、/o

显示选项参数/m、/n、/o只是改变显示的样式,不改变文本文件的内容。

这三个参数不与其他任何参数有冲突;但是参数/m和参数/n、参数/o有冲突,因为只显示文件名代表不能显示字符串所在行序号、也不能显示字符串偏移值。

参数/m表示仅显示文件名

参数/n表示显示行序号

参数/o表示显示目标字符串离文件开头的偏移值(偏移字节数,而非偏移字符数)。

对于ASCII字符,一个字符就是一个字节(例如空格),不可见的回车符、换行符占用两个字节,但是对于中文符号或汉字,一个汉字对应2-4个字节。

三、find命令和findstr命令的区别

3.1 find命令支持统计总行数

find命令支持参数/c(仅显示匹配行数),可以对符合规则的行进行数量上的统计。

例如【find /c "A" tool.txt】可以统计test.txt中含有字符串abc的总行数,而findstr命令则没有直接提供该功能,需要配合for语句才能实现。

findstr命令语句的参数/c功能不是计数(count),而是连接(connect) ;参数/c后面跟的string允许存在空格,而不会将其当做两个字符串。

3.2 find命令支持查找Unicode字符

一般来说除了字母数字这些能与ASCII兼容的字符,某一个国家专用的语言文字(比如中文简体、日本语、韩语)普遍用Utf8编码,所以要想查除了ASCII编码范围外的字符,就需要用find命令。 

find能查"又岂",但是findstr查不出来。

如果你想要搜索unicode字符,并且想要类似findstr命令的强大功能,可以下载一个第三方程序——GNU Grep for windows,详见下载官网。 

3.3 find命令支持过滤特殊字符

本节的观点来自网上,大概是2012年很流行;不知道为何我实现不了,可能是cmd命令有所更新?废话不多说,引述一下他们的观点,给各位观众老爷下盘陈年腌菜。

find可以过滤某些特殊字符,而findstr则不行。

比如,我们在使用【fsutil fsinfo drives】语句查询磁盘分区的时候,如果想让盘符分行显示而不是显示在同一行上的时 候(在用for语句提取盘符的时候很有用),find可以大显身手,而findstr只能干瞪眼了。

具体代码为 :【fsutil fsinfo drives|find /v ""】,输出结果如下。

如果改成findstr,就会报错。

虽然find结果也没显示成多行,但是findstr结果都没有。 可能2012年的网友说的优势就是这种意思吧?

3.4 findstr命令的string字段支持通配符

在搜索的字符串中,find不能使用通配符 (* 和 ) 。

若要使用通配符和 regex 模式搜索字符串,只能使用findstr命令,或者下载第三方程序grep。

3.5 find命令无法读取备用数据流

find命令无法读取备用数据流。

若要在备用数据流中搜索,请使用 findstrmorefor /f命令。

上面这个引用,来自微软官网对find命令的注释

至今我还是不懂备用数据流啥意思?英文名称是alternate data streams。

3.6 find和findstr命令都支持退出码(错误码)

find和findstr命令的退出代码一共3种,每一种代表不同的搜索结果。

退出代码说明
0找到搜索的字符串
1找不到搜索的字符串
2找不到搜索的文件或指定了无效的命令行开关

findstr命令 

find命令

 

原网站

版权声明
本文为[dssgresadfsrgre]所创,转载请带上原文链接,感谢
https://blog.csdn.net/PSpiritV/article/details/125573072