【问题标题】:How to use OR operator with command FINDSTR from a Windows command prompt?如何在 Windows 命令提示符下将 OR 运算符与命令 FINDSTR 一起使用?
【发布时间】:2015-03-17 15:57:25
【问题描述】:

Findstr 应该支持正则表达式以及我使用它的方式我需要有一个 OR 来检查文件是否以 .exe 结尾 OR .dll。但是我无法让 OR 操作起作用。 Windows 考虑使用 |,我尝试通过管道传输上一个命令,而 OR 被读取为文字 OR

【问题讨论】:

  • findstr 使用空格分隔 OR 匹配的搜索模式,例如findstr /ri "\.exe$ \.dll$"。如果模式本身有空格,您可以指定多个/c 模式,例如findstr /ri /c:" .*\.exe$" /c:" .*\.dll$".

标签: windows command-line findstr


【解决方案1】:

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:"..."的区别:

  1. "regexp1 regexp2 regexp3" 表示搜索字符串与三个空格分隔的正则表达式之一匹配的行。选项/R 还可用于将两个空格之间的三个字符串显式解释为正则表达式。建议这样做是为了让 findstr 和每位读者都 100% 清楚搜索字符串被解释为正则表达式。
  2. /L "word1 word2 word3" 表示搜索与由三个空格分隔的字面解释字符串之一匹配的字符串的行。使用的选项 /L 强制将两个空格之间的三个字符串明确解释为文字字符串,而不是正则表达式。
  3. /C:"word 1" /C:"word 2" /C:"word 3" 表示搜索具有与空格字符被解释为空格的三个字面解释字符串之一匹配的字符串的行。选项/L 还可用于将三个搜索字符串显式解释为文字字符串。建议这样做是为了让 findstr 和每位读者都 100% 清楚搜索字符串被解释为文字字符串。
  4. /R /C:"reg exp 1" /C:"reg exp 2" /C:"reg exp 3" 表示搜索与空格字符被解释为空格的三个正则表达式字符串之一匹配的字符串的行。选项 /R 强制将三个字符串明确解释为正则表达式,其中空格被解释为空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2019-01-26
    • 2021-08-28
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多