How to Perform Logical OR Operations with findstr.exe for Multiple File Extensions (.cpp and .h)


6 views

html

Many developers working with Windows command-line tools need to search for multiple file patterns simultaneously. The findstr utility, while powerful, has some non-intuitive syntax when it comes to logical OR operations.

To search for either ".cpp" or ".h" in files, you need to use the pipe character (|) as the OR operator, not a comma:

findstr /i "\.cpp\|\.h" filename.txt

Key points about this syntax:

  • Use double quotes around the entire pattern
  • Escape the dot (.) with backslash for literal matching
  • Escape the pipe (|) with backslash as well

Searching in current directory files:

findstr /i /m "\.cpp\|\.h" *.*

Recursive search through subdirectories:

findstr /i /s "\.cpp\|\.h" *.*

Counting matches for both patterns:

findstr /i /c:".cpp" /c:".h" file.txt | find /c /v ""

For better readability, you can use multiple /C switches:

findstr /i /c:".cpp" /c:".h" filename.txt
  • The /i flag makes the search case-insensitive
  • For exact matching, use word boundaries: \<\.cpp\>
  • When redirecting output, remember Windows' character escaping rules

For large codebases, consider combining with other commands:

for /r %i in (*.cpp *.h) do findstr /n "pattern" "%i"

This approach is often more efficient than pure findstr recursion.


The Windows command-line tool findstr.exe is powerful for text pattern matching, but its OR operation syntax isn't immediately obvious. Many developers need to search for multiple file extensions like .cpp OR .h in their codebases.

Instead of using commas, findstr.exe requires spaces between search terms for logical OR:

findstr /i ".cpp .h" filename.txt

To search across all files in a directory:

findstr /i /m ".cpp .h" *.txt

To include subdirectories recursively:

findstr /i /s ".cpp .h" *.*

For more complex pattern matching, use the /R switch:

findstr /i /r ".cpp\|.h" source_files.txt
  • Don't use commas between search terms
  • Enclose multiple patterns in quotes
  • Remember the /i flag makes the search case-insensitive

When searching large codebases, combine with other commands for better performance:

dir /s /b *.cpp *.h | findstr /i "pattern"