Windows下文本过滤

Table of Contents

想在windows下使用命令来查找文件,可以使用如下命令:where命令的格式如下:

WHERE [/R dir] [/Q] [/F] [/T] pattern...

Description:
Displays the location of files that match the search pattern.
By default, the search is done along the current directory and
in the paths specified by the PATH environment variable.

Parameter List:
/R       Recursively searches and displays the files that match the
given pattern starting from the specified directory.

/Q       Returns only the exit code, without displaying the list
of matched files. (quite mode)

/F       Displays the matched filename in double quotes.

/T       Displays the file size, last modified date and time for all
matched files.

pattern  Specifies the search pattern for the files to match.
Wildcards * and ? can be used in the pattern. The
"$env:pattern" and "path:pattern" formats can also be
specified, where "env" is an environment variable and
the search is done in the specified paths of the "env"
environment variable. These formats should not be used
with /R. The search is also done by appending the
extensions of the PATHEXT variable to the pattern.

/?      Displays this help message.

NOTE: The tool returns an error level of 0 if the search is
successful, of 1 if the search is unsuccessful and
of 2 for failures or errors.

Examples:
WHERE /?
WHERE myfilename1 myfile????.*
WHERE $windir:*.*
WHERE /R c:\windows *.exe *.dll *.bat
WHERE /Q ??.???
WHERE "c:\windows;c:\windows\system32:*.dll"
WHERE /F /T *.dll

我们想查找文件内容的命令是:find或者findstr
在linux下的查找文件的命令也是 :  where
也可以使用find -name
查找文件的内容的话,可以使用grep ,支持正则表达式,使用起来也很方便,再加上管道,有的时候会觉得特别的方便和快捷。

Findstr 

 

使用常规表达式搜索文件中的文本模式。

 

语法 

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 [...] 指定要搜索的文件。 /? 在命令提示符显示帮助。   注释 

  • findstr 中使用常规表达式Findstr 可以在任何 ASCII 文件或文件中精确查找所要查找的文本。然而,有时要匹配的信息只有一部分或需要查找更宽广的信息范围。在这种情况下,findstr 具有使用常规表达式搜索各种文本的强大功能。

    常规表达式是用于指定文本类型的符号,与精确的字符串相反。标记使用文字字符和元字符。每个在常规的表达式语法中没有特殊意义的字符都是文字字符,与出现的该字符匹配。例如,字母和数字是文字符号。元字符是在常规表达式语法中具有特殊意义(操作符或分隔符)的符号。

    下表列出 findstr 接受的元字符。

     

    字符

    .

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

     

    常规表达式语法的特殊字符在一起使用时功能最强大。例如,以下匹配任意字符串的通配符 (.) 和重复符 (*) 的组合:

    .*

    将如下表达式用作匹配以“b”开头并以“ing”结尾的任何字符串的更大表达式的组成部分:

    b.*ing

范例 

1,用空格分隔多个搜索字符串,除非参数以 /c 为前缀。

示例:要搜索 update 中的补丁 kb959426 , kb960803 和 kb923561,并忽略文件名的大小写。

Microsoft Windows XP [版本 5.1 2600]
<C> 版权所有 1985-2001 Microsoft Corp.

 

C:\Documents and Settings\寒夜孤星>dir "%SystemRoot%\SoftwareDistribution\Download" /b/s | findstr /i "kb959426.cat kb960803.cat kb923561.cat"
C:\WINDOWS\SoftwareDistribution\Download\1a8d8b5adfad6783fc587b22c7b46bdb\update\KB959426.cat
C:\WINDOWS\SoftwareDistribution\Download\d17c21d524671e137c74dca6825b5000\update\KB960803.cat
C:\WINDOWS\SoftwareDistribution\Download\f907772167447a38fba955073db9f600\update\KB923561.CAT

C:\Documents and Settings\寒夜孤星>

智能 ABC 半:
示例:要搜索 %ProgramFiles% 中含有“Windows Media”的子目录,并忽略文件名的大小写。

 
Microsoft Windows XP [版本 5.1 2600]
<C> 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\寒夜孤星>dir "C:\Program Files" /b | findstr /i /c:"Windows Media"
C:\Program Files\Windows Media Components
C:\Program Files\Windows Media Connect 2
C:\Program Files\Windows Media Player

C:\Documents and Settings\寒夜孤星>

智能 ABC 半:

2,示例:要搜索目录 D:\Program Files\UC 中uc登陆过的所有帐号(文件夹名由数字组成),且号码为8位以上。
Microsoft Windows XP [版本 5.1 2600]
<C> 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\寒夜孤星>dir "D:\Program Files\UC" /b/s | findstr ^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*[0-9]$
D:\Program Files\UC\users\30194447
D:\Program Files\UC\users\34886634

C:\Documents and Settings\寒夜孤星>

智能 ABC 半:
说明:本例中,^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] 用来限定字符开头必须是数字组成,且至少是8位,[0-9]$ 用来限定字符的结尾必须是数字构成,* 用来规定中间也要由数字组成。

3,示例:分别检查目录 C:\WINDOWS\Config(默认为空)和 C:\WINDOWS\system32 是否为空。

 

Microsoft Windows XP [版本 5.1 2600]
<C> 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\寒夜孤星>dir /a /b "%SystemRoot%\Config"|findstr .>nul 2>nul && echo 此目录不为空 || echo 此目录为空
此目录为空

C:\Documents and Settings\寒夜孤星>dir /a /b "%SystemRoot%\system32"|findstr .>nul 2>nul && echo 此目录不为空 || echo 此目录为空
此目录不为空

C:\Documents and Settings\寒夜孤星>

智能 ABC 半:
4,示例:假设您想要找到 C:\WINDOWS 目录(不包括子目录)中每个包含“winnt”这个单词,并以其开头,并且包含“bmp”这个单词,并以其结尾(做扩展名)的文件(包括具有隐藏属性及系统文件),而不考虑字母的大小写。 www.it165.net
Microsoft Windows XP [版本 5.1 2600]
<C> 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\寒夜孤星>dir "%SystemRoot%" /a /b | findstr /i "\<winnt.*\.bmp\>"
winnt.bmp
winnt256.bmp

C:\Documents and Settings\寒夜孤星>

智能 ABC 半:
说明:本例中 \. 的 \ 是将 . 由元字符转为文字字符。

 

5,常规表达式中,行位置与字位置的关系。例如,一个文件夹名或文件名,被认为是一行,而这个名字可以是由一个或数个单词构成,并以空格分隔,那么 每个单词就是一个字。示例,要搜索 %ProgramFiles% 中的目录名含有“Hanye”并以其开头,且忽略文件夹名的大小写。实际存在的相关目录分别是:

Hanye Guxing

Hanye

HanyeGuxing

Guxing Hanye

GuxingHanye

 
Microsoft Windows XP [版本 5.1 2600]
<C> 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\寒夜孤星>dir "C:\Program Files" /b | findstr /i "^Hanye.*"
Hanye Guxing
Hanye
HanyeGuxing

C:\Documents and Settings\寒夜孤星>dir "C:\Program Files" /b | findstr /i "\<Hanye.*"
Hanye Guxing
Hanye
HanyeGuxing
Guxing Hanye

C:\Documents and Settings\寒夜孤星>

智能 ABC 半:

看下面的示例:含有绝对路径的文件名中的 \ 被作分隔符分隔了每个行的各个字。

 

Microsoft Windows XP [版本 5.1 2600]
<C> 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\寒夜孤星>dir "%SystemRoot%\SoftwareDistribution\Download" /b/s | findstr /i "^kb959426"

C:\Documents and Settings\寒夜孤星>dir "%SystemRoot%\SoftwareDistribution\Download" /b/s | findstr /i "\<kb959426"
C:\WINDOWS\SoftwareDistribution\Download\1a8d8b5adfad6783fc587b22c7b46bdb\WindowsXP-KB959426-x86-CHS.psm
C:\WINDOWS\SoftwareDistribution\Download\1a8d8b5adfad6783fc587b22c7b46bdb\update\KB959426.cat

C:\Documents and Settings\寒夜孤星>

智能 ABC 半:
6,如果要在相同组文件中搜索几个不同项目,请创建在新行上包含每个搜索标准的文本文件。也可以列出要在文本文件中搜索的确切文件。要使用文件 Finddata.txt 中的搜索条件,请搜索 Filelist.txt 中列出的文件,然后将结果保存到文件 Results.out 中,请键入:

 

findstr /g:finddata.txt /f:filelist.txt > results.out

 

注意
1,当搜索的字符串中含有开关时,请注意!

例如,搜索字符 /r,下面的语句是错误的:

findstr /l "/r" test

不过,可以使用开关 /c 来强制指定关键字:
findstr /l /c:"/r" test
findstr /l /c:/r test

还有一个方法,就是上文提到的 \ 了:
findstr /l \/r test

Posted in BAT