Findstr
应该支持正则表达式和我使用它的方式 我需要有一个 OR 来检查文件是否以 .exe< 结尾
或 .dll
。但是我无法使 OR 操作起作用。 Windows 考虑使用 |
我尝试通过管道传输上一个命令并且 OR
被读取为文字 OR。
最佳答案
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输出strong>,获取此输出的命令行可能是:
%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$
进行搜索,并返回两个表达式之一与 a 匹配的所有行字符串。
OR 两个或多个正则表达式字符串的另一种方法是在命令行上多次使用参数 /C:"..."
表达式搜索字符串包含一个或多个空格,这些空格应作为文字字符包含在搜索表达式中。
%SystemRoot%\system32\findstr.exe /I /R /C:"\.dll$" /C:"\.exe$" FileNames.lst
结果与上面使用其他命令行的结果相同。
但对于这个特定任务,根本不需要运行正则表达式搜索,因为 findstr 还提供了参数 /E
用于仅返回搜索字符串所在的行位于一行的末尾。
%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
明确强制将三个字符串解释为正则表达式,并将空格解释为空格。
关于windows - 如何在 Windows 命令提示符下将 OR 运算符与命令 FINDSTR 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29103843/