Findstr
应该支持正则表达式,而我需要使用它来检查文件是否以.exe
或.dll
结尾。然而我无法让OR
操作起作用。Windows认为我试图将之前的命令传递给管道符|
,而OR
则被读作字面上的OR。
Findstr
应该支持正则表达式,而我需要使用它来检查文件是否以.exe
或.dll
结尾。然而我无法让OR
操作起作用。Windows认为我试图将之前的命令传递给管道符|
,而OR
则被读作字面上的OR。
Windows
系统32目录下的findstr.exe
只支持一组非常有限的正则表达式字符。在命令提示符窗口中运行findstr /?
,将显示此控制台应用程序的帮助信息,其中还列出了支持的正则表达式字符及其含义。
但正如Eryk Sun在上面的评论中所解释的那样,可以在命令行上指定多个搜索字符串以构建一个简单的OR表达式。
如果有一个包含以下内容的列表文件FileNames.lst
C:\Program Files\Internet Explorer\ieproxy.dll
C:\Program Files\Internet Explorer\iexplore.exe
C:\Program Files\Internet Explorer\iexplore.exe.mui
只需要输出以.dll
或者 .exe
结尾的所有文件名,大小写不敏感,使用 findstr 命令进行输出。获取此输出的命令行如下:
%SystemRoot%\system32\findstr.exe /I /R "\.exe$ \.dll$" FileNames.lst
FileNames.lst
中的示例行:C:\Program Files\Internet Explorer\ieproxy.dll
C:\Program Files\Internet Explorer\iexplore.exe
在正则表达式搜索字符串中,空格被解释为findstr
作为两个字符串之间的分隔符。因此,findstr
使用正则表达式字符串\.dll$
和\.exe$
进行搜索,并返回其中一个表达式匹配字符串的所有行。
另一种将两个或多个正则表达式字符串进行“OR”运算的方法是在命令行上多次使用参数/C:"..."
,这是必要的,当正则表达式搜索字符串包含一个或多个空格时,应将其包含为搜索表达式中的文字字符。
%SystemRoot%\system32\findstr.exe /I /R /C:"\.dll$" /C:"\.exe$" FileNames.lst
/E
,只返回在行末找到搜索字符串的行。%SystemRoot%\system32\findstr.exe /E /I /C:.exe /C:.dll FileNames.lst
"..."
或者/C:"..."
的区别是:
"regexp1 regexp2 regexp3"
表示搜索包含三个空格分隔正则表达式之一的字符串的行。可以使用/R
选项明确指定这两个空格之间的三个字符串应当解释为正则表达式。建议这样做,以便让findstr
和每个读者都清楚地知道,搜索字符串被解释为正则表达式。/L "word1 word2 word3"
表示搜索包含三个空格分隔文字字符串之一的字符串的行。/L
选项强制将这两个空格之间的三个字符串明确解释为文本字符串,而不是正则表达式。/C:"word 1" /C:"word 2" /C:"word 3"
表示搜索包含三个字面解释的字符串中的一个的行,其中空格字符被解释为普通的空格符。可以使用/L
选项附加使用,以便明确将三个搜索字符串解释为字面字符串。建议这样做,以便让findstr
和每个读者都清楚地知道,搜索字符串被解释为字面字符串。/R /C:"reg exp 1" /C:"reg exp 2" /C:"reg exp 3"
表示搜索包含三个空格分隔的正则表达式字符串之一的行,其中空格字符被解释为普通的空格符。使用/R
选项强制将这三个字符串明确解释为带有空格符解释的正则表达式。
findstr
使用空格来分隔OR
匹配的搜索模式,例如findstr /ri "\.exe$ \.dll$"
。如果模式本身有空格,则可以指定多个/c
模式,例如findstr /ri /c:" .*\.exe$" /c:" .*\.dll$"
。 - Eryk Sun