How to use OR operator with command FINDSTR from a Windows command prompt?
Asked Answered
L

1

7

Findstr is supposed to support regular expressions and the way I am using it I need to have an OR to check if a file ends in .exe OR .dll. However I cannot get the OR operation to work. Windows thinks on using | that I try to pipe the previous command and OR is read as literal OR.

Lukas answered 17/3, 2015 at 15:57 Comment(1)
findstr uses whitespace to delimit OR matched search patterns, e.g. findstr /ri "\.exe$ \.dll$". If the pattern itself has whitespace, you can specify multiple /c patterns, e.g. findstr /ri /c:" .*\.exe$" /c:" .*\.dll$".Humpbacked
H
11

findstr.exe in Windows system32 directory supports only a very limited set of regular expression characters. Running in a command prompt window findstr /? results in getting displayed help for this console application listing also the supported regular expression characters with their meanings.

But as Eryk Sun explained in his comment above, multiple search strings can be specified on command line to build a simple OR expression.

In case of having a list file FileNames.lst containing for example

C:\Program Files\Internet Explorer\ieproxy.dll
C:\Program Files\Internet Explorer\iexplore.exe
C:\Program Files\Internet Explorer\iexplore.exe.mui

and just all file names ending with .dll OR .exe case-insensitive should be output by command findstr, the command line for getting this output could be:

%SystemRoot%\system32\findstr.exe /I /R "\.exe$ \.dll$" FileNames.lst

The output is for the example lines in FileNames.lst:

C:\Program Files\Internet Explorer\ieproxy.dll
C:\Program Files\Internet Explorer\iexplore.exe

The space in regular expression search string is interpreted by findstr as a separator between the two strings. Therefore findstr searches with the regular expression strings \.dll$ and \.exe$ and returns all lines where one of the two expressions matches a string.

Another method to OR two or more regular expression strings would be using parameter /C:"..." multiple times on command line which is necessary when a regular expression search string contains one or more spaces which should be included as literal character(s) in search expression.

%SystemRoot%\system32\findstr.exe /I /R /C:"\.dll$" /C:"\.exe$" FileNames.lst

The result is the same as above with the other command line.

But for this specific task it is not necessary at all to run a regular expression search as findstr offers also the parameter /E for returning only lines where the searched strings are found at end of a line.

%SystemRoot%\system32\findstr.exe /E /I /C:.exe /C:.dll FileNames.lst

A brief description between the differences on using "..." or /C:"...":

  1. "regexp1 regexp2 regexp3" means searching for a line with a string matched by one of the three space separated regular expressions. The option /R can be used additionally to explicitly interpret the three strings between the two spaces as regular expressions. It is advisable to do so for making it 100% clear for findstr and every reader that the search strings are interpreted as regular expressions.
  2. /L "word1 word2 word3" means searching for a line with a string matched by one of the three space separated literally interpreted strings. The used option /L forces explicitly an interpretation of the three strings between the two spaces as literal strings and not as regular expressions.
  3. /C:"word 1" /C:"word 2" /C:"word 3" means searching for a line with a string matched by one of the three literally interpreted strings on which the space character is interpreted as space. The option /L can be used additionally to explicitly interpret the three search strings between as literal strings. It is advisable to do so for making it 100% clear for findstr and every reader that the search strings are interpreted as literal strings.
  4. /R /C:"reg exp 1" /C:"reg exp 2" /C:"reg exp 3" means searching for a line with a string matched by one of the three regular expressions strings on which the space character is interpreted as space. The option /R forces explicitly an interpretation of the three strings as regular expressions with space being interpreted as space.
Herrle answered 22/8, 2015 at 19:21 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.