Mahmoud ElMansy: knowledge meant to be free

Replacing Strings in Multiple Files in Folder and SubFolders

This is the second article on windows PowerShell scripting .
Now what we want to do ?
Simply we want to replace certain string by another string value in all files in certain folder and
All sub folders .

$items = Get-ChildItem * -recurse
# enumerate the items array
foreach ($item in $items)
      # if the item is a directory, then process it.
     if ($item.Attributes -ne "Directory")
        (Get-Content $item.FullName ) |
         Foreach-Object { $_ -replace 'old', 'new' } |
         Set-Content $item.FullName

Or we can use .

Get-ChildItem * -recurse  | Where-Object {$_.Attributes -ne "Directory"} |
     ForEach-Object {  (Get-Content $_) -replace
     "old","new" | Set-Content -path $_ }

We can do change to that script to keep backup from that file .

 Get-ChildItem * recurse -exclude *.bak | Where-Object {$_.Attributes -ne "Directory"} |
     ForEach-Object { Copy-Item $_ "$($_).bak"; (Get-Content $_) -replace
     "old","new" | Set-Content -path $_ }

Or to search for specified text.

   $txtFiles=get-childitem . *.txt -recurse
    foreach ($file in $txtFiles)
            (Get-Content $file.PSPath) |
             Foreach-Object {$_ -replace "old", "new"} |
             Set-Content $file.PSPath

Here is alink to do that with regular expressions.
A simple PowerShell script to find and replace using regular expressions in multiple files
Hope it helped .