I had a quick task today that required that I search a couple hundred directories and look in specific files to see if they contained a certain piece of code. All I wanted was the list of files that did not. PowerShell to the rescue!
I’ll break down each of the calls I used and provide the full command-line at the end for anyone interested.
First, we need to recurse through all the files in a specific directory. This is simple enough using Get-ChildItem.
Get-ChildItem -include [paths,and,filenames,go,here] -recurse
Next, I needed to loop through each of those files using ForEach-Object :
ForEach-Object { … }
Next, I need to get the content of each of those files. That’s done using Get-Content:
Get-Content [file]
I then need to be able to determine if the contents of the file contains the string I’m looking for. This is easy enough with Select-String:
Select-String -pattern [pattern]
That’s pretty much all the commands you need to know — we just need to put them together now.
PS> Get-ChildItem -include *.html,*.xhtml -recurse | ForEach-Object { if( !( select-string -pattern "pattern" -path $_.FullName) ) { $_.FullName}}