Windows system32 目录中的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结尾的文件名OR.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
结果与上面的其他命令行相同。
但是对于这个特定的任务,根本不需要运行正则表达式搜索,因为 findstr 还提供了参数 /E 用于仅返回在 a 末尾找到搜索字符串的行行。
%SystemRoot%\system32\findstr.exe /E /I /C:.exe /C:.dll FileNames.lst
简述使用"..."或/C:"..."的区别:
-
"regexp1 regexp2 regexp3" 表示搜索字符串与三个空格分隔的正则表达式之一匹配的行。选项/R 还可用于将两个空格之间的三个字符串显式解释为正则表达式。建议这样做是为了让 findstr 和每位读者都 100% 清楚搜索字符串被解释为正则表达式。
-
/L "word1 word2 word3" 表示搜索与由三个空格分隔的字面解释字符串之一匹配的字符串的行。使用的选项 /L 强制将两个空格之间的三个字符串明确解释为文字字符串,而不是正则表达式。
-
/C:"word 1" /C:"word 2" /C:"word 3" 表示搜索具有与空格字符被解释为空格的三个字面解释字符串之一匹配的字符串的行。选项/L 还可用于将三个搜索字符串显式解释为文字字符串。建议这样做是为了让 findstr 和每位读者都 100% 清楚搜索字符串被解释为文字字符串。
-
/R /C:"reg exp 1" /C:"reg exp 2" /C:"reg exp 3" 表示搜索与空格字符被解释为空格的三个正则表达式字符串之一匹配的字符串的行。选项 /R 强制将三个字符串明确解释为正则表达式,其中空格被解释为空格。