Recommended Free Tools
For a quick visual search, use File Explorer in an indexed folder. For an immediate, line-by-line scan across folders, use PowerShell’s Select-String; Command Prompt’s findstr is a useful shorter alternative. All three are built into Windows, so you do not need another program to search ordinary text files.
Which Windows method should you use?
The right method depends mainly on whether you need indexed convenience or a direct scan of the files themselves.
As an Amazon Associate I earn from qualifying purchases.
| Need | Best choice | What you get |
|---|---|---|
| Browse matches visually in a known folder | File Explorer | Windows Search results, provided the location and file contents are indexed |
| Search a folder and every subfolder with matching lines shown | PowerShell Select-String |
File name, line number, and the matching line |
| Run a short recursive command from Command Prompt | findstr |
Recursive, case-insensitive results with optional line numbers |
| Search one file or a small, explicitly named set | find |
Simple string matching with case and line-number switches |
File Explorer depends on the Windows Search index. PowerShell and findstr read the selected files directly, so they are normally the better choice when indexing is incomplete or you need to verify the exact line containing a match.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Search inside text files with File Explorer
1. Start in the narrowest useful folder
- Open File Explorer.
- Navigate to the folder that contains the files.
- Click the search box and type the word or phrase.
Starting in a particular folder limits the search scope. Searching from This PC broadens the scope and can take longer. The result list can include files whose contents contain the term, not only files whose names contain it, when Windows has indexed that content.
#1 Best Overall
2. Confirm that the location and contents are indexed
If Explorer returns files based on their names but misses a word that is visibly inside a file, check indexing rather than changing the spelling of the query. Windows Search must cover the folder, and the relevant file type must have content indexing enabled.
Windows 11 documents two indexing modes. Classic indexes common user folders, while Enhanced indexes the entire PC, including user folders and files. Enhanced coverage can use more system resources. You can add locations to Classic indexing through Windows’ indexing settings when you do not want to index the whole computer.
The exact Settings labels can change between Windows releases. Open Windows Settings and search for indexing or Searching Windows, then review the indexed locations and the selected mode. If the target folder is not covered, either add it where appropriate or use a direct command-line scan.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware match3. Allow indexing to finish
On a new installation, a newly added location, or a large collection of files, the index may not be ready immediately. Microsoft says initial indexing can take up to a couple of hours; that is an estimate, not a guaranteed completion time. Updated data is re-indexed in the background after the initial pass. A missing result during that period does not prove that the text is absent.
When Explorer is the better choice
- You want a visual result list rather than command output.
- The folder is already indexed and you search it regularly.
- You are exploring an unfamiliar set of files and do not yet know which files matter.
When to skip Explorer
- The folder is outside the indexed scope.
- The index is still building and you need an answer now.
- You need line numbers and the exact text around each match.
- You are diagnosing a result and want to know precisely which files were read.
Use PowerShell Select-String for a direct content search
Select-String is the most flexible built-in option for plain-text searches. It reports the file, line number, and matching line, making it suitable for checking configuration files, logs, notes, source code, and other readable text.
Rank #2
Search all TXT files in the current folder
Select-String -Path .*.txt -Pattern 'search phrase' -SimpleMatch
Run this in PowerShell after changing to the folder you want to search. The wildcard *.txt limits the input to TXT files. Replace search phrase with the text you need.
-SimpleMatch makes the pattern literal. Without it, Select-String treats the pattern as a regular expression, so punctuation and other special characters can change the meaning of the query. Matching is case-insensitive by default. Add -CaseSensitive when capitalization must match exactly.
Include every subfolder
Get-ChildItem -Path . -Filter *.txt -File -Recurse |
Select-String -Pattern 'search phrase' -SimpleMatch
Get-ChildItem enumerates TXT files under the current directory, and -Recurse descends into subfolders. The pipeline sends those file paths to Select-String, which prints each matching line.
Recursive enumeration can encounter access-denied errors. That means the account running PowerShell cannot read one or more locations; it does not mean that every other file failed to scan. Narrow the starting folder, adjust permissions where appropriate, or run the shell with an account that is authorized to read the files.
Search several text extensions at once
Get-ChildItem -Path . -Include *.txt,*.log -File -Recurse |
Select-String -Pattern 'search phrase' -SimpleMatch
Use additional extensions in the -Include list for other plain-text formats. If a collection contains many extensions, enumerate the required types explicitly or run a separate command for each extension. Do not assume that a file’s extension makes it readable text: these commands search text representations and are not document-format parsers for every binary or proprietary format.
Rank #3
Read the output
A match includes the path or file name, a line number, and the line that contains the pattern. That is useful when you need to open the file at the relevant location or verify whether a hit is a comment, a value, or an unrelated occurrence. If several lines in one file match, PowerShell can report each matching line.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Handle regular expressions deliberately
The default pattern mode is regular-expression matching. That is helpful when you intentionally need a pattern, but it can surprise you when searching for punctuation. For an ordinary word, URL fragment, error code, or quoted phrase, keep -SimpleMatch. If you deliberately use a regular expression, omit that switch and treat the pattern as a regex rather than as literal text.
Account for file encoding
Encoding can explain why text that looks correct in an editor is not found. Select-String uses a byte-order mark (BOM) to detect an encoding. If there is no BOM, it assumes UTF-8. When a file uses another encoding, specify the appropriate -Encoding value instead of assuming the displayed characters are being decoded correctly. Verify the file’s actual encoding before changing the search term.
Search recursively with Command Prompt findstr
findstr is convenient when you are already in Command Prompt or need a compact recursive command.
findstr /s /i /n /c:"search phrase" *.txt
Run it from the directory that should be searched. The switches mean:
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsRank #4
/ssearches the current directory and all subdirectories./iignores case./nprints line numbers./c:"search phrase"treats the quoted phrase as one search string.
findstr uses regular-expression matching by default. Add /l when the search must be literal, especially for punctuation or characters that have regex meaning:
findstr /s /i /n /l /c:"error: 404" *.txt
The final *.txt limits the search to TXT files. Change it to another text extension when needed. As with PowerShell, do not treat this command as a parser for every binary or office-document format.
When findstr is preferable
- You want one short command and are working in Command Prompt.
- You need recursive and case-insensitive switches without building a pipeline.
- You are searching conventional text files and do not need PowerShell’s encoding or object-processing features.
Use the simpler find command for a small, explicit search
The older find command searches for a string in specified files. It supports /i for case-insensitive matching and /n for line numbers, but it does not provide findstr’s recursive /s directory option.
Because it does not walk a directory tree by itself, use find when the files are already known or when you are searching a small set in the current location. Choose findstr or PowerShell when the requirement is “this folder and every descendant.”
Literal phrases, case, subfolders, and file scope
Searching a phrase literally
For PowerShell, use -SimpleMatch. For findstr, use /l. These options prevent punctuation from being interpreted as regex syntax. Quoting the phrase keeps spaces together, but quoting alone does not switch off regex behavior.
Matching capitalization
PowerShell is case-insensitive by default; add -CaseSensitive for an exact-capitalization search. The findstr command is case-sensitive unless you add /i, so include that switch when capitalization should not matter.
Including or excluding folders
In PowerShell, choose the starting path deliberately and use -Recurse only when descendants belong in the search. In Command Prompt, /s includes subdirectories. Neither command should be pointed at an unnecessarily broad location when the files contain private or unrelated material; a narrower scope is faster and produces easier-to-audit results.
Choosing extensions
Restricting the wildcard or enumeration to known text extensions reduces noise and avoids trying to interpret binary data. If a project stores plain text under several extensions, list each extension explicitly. A search that returns no match is meaningful only for the files and encoding that were actually readable.
Free tools Windows power users keep installed
One-click scans. No signup required.
Troubleshoot missing or confusing results
| Symptom | Likely cause | Action |
|---|---|---|
| Explorer finds names but not words in file bodies | The folder or file contents are not indexed, or indexing is incomplete | Review Windows Search indexing coverage and allow the initial index to finish; use PowerShell or findstr for an immediate scan |
| Matches in the main folder but not subfolders | The search was not recursive | Use Get-ChildItem -Recurse with PowerShell or add /s to findstr |
| A phrase containing punctuation behaves unexpectedly | Regex interpretation is active | Use -SimpleMatch in PowerShell or /l in findstr |
| Capitalization matters, but results are too broad | The command is using case-insensitive matching | Add -CaseSensitive in PowerShell; omit /i in findstr |
| PowerShell reports access denied | The account cannot read one or more recursive paths | Search an authorized folder, correct permissions, or use an authorized account |
| Text visible in an editor is not matched | The file’s encoding was decoded differently | Check whether it has a BOM and provide the correct -Encoding value |
| Binary or formatted documents produce no useful hits | The command is a plain-text scanner, not a universal document parser | Use a format-aware application or an extracted text representation |
A practical workflow for reliable searches
- Define the scope. Identify the smallest folder and the text extensions that should be included.
- Try Explorer first if that location is already indexed and you want a visual list.
- Switch to PowerShell when you need an immediate scan, recursive coverage, line numbers, or encoding control.
- Make the match mode explicit. Use literal matching for ordinary phrases and regex only when you intend to use it.
- Check the output. Open the reported file and line to confirm that the hit has the meaning you need.
- Investigate zero results. Confirm the extension filter, recursion, permissions, encoding, and whether the term is actually present in the files being read.
Windows 10 and Windows 11 differences that matter
The direct commands shown here work on both Windows 10 and Windows 11 because they use built-in PowerShell and Command Prompt tools. File Explorer’s search and indexing screens can have different wording or layout between releases, so follow the current indexing settings available on the specific PC rather than relying on an old Start-menu path.
Windows 11’s documented Classic and Enhanced modes describe indexing coverage for the current Windows Search experience. Windows 10 may present different controls, but the underlying practical test is the same: is the target folder covered, are the file contents indexed, and has indexing completed? If any answer is no, direct scanning avoids waiting for the index.
Security and performance considerations
A recursive scan reads every file that matches the enumeration. On a large tree, that can take time and generate substantial output. Narrow the path and extensions first. Searching only files you are authorized to read also avoids access errors and keeps private data out of an unnecessarily broad result set.
Explorer can feel faster after indexing because it queries prepared search data, while a direct command must inspect the files for that run. The trade-off is freshness and certainty: direct scanning is useful when files changed recently or the index is incomplete, whereas Explorer is convenient for repeated browsing in a stable indexed location.
Quick Recap
Quick command reference
| Purpose | Command |
|---|---|
| Current folder, TXT files, literal phrase | Select-String -Path .*.txt -Pattern 'search phrase' -SimpleMatch |
| Recursive TXT search in PowerShell | Get-ChildItem -Path . -Filter *.txt -File -Recurse | Select-String -Pattern 'search phrase' -SimpleMatch |
| Recursive TXT and LOG search in PowerShell | Get-ChildItem -Path . -Include *.txt,*.log -File -Recurse | Select-String -Pattern 'search phrase' -SimpleMatch |
| Recursive, case-insensitive TXT search in Command Prompt | findstr /s /i /n /c:"search phrase" *.txt |
| Recursive literal phrase search with findstr | findstr /s /i /n /l /c:"search phrase" *.txt |
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

