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.
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:"..."
:
"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 forfindstr
and every reader that the search strings are interpreted as regular expressions./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./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 forfindstr
and every reader that the search strings are interpreted as literal strings./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.
© 2022 - 2024 — McMap. All rights reserved.
findstr
uses whitespace to delimitOR
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