1. получим список файлов.
есть два способа :
Get-ChildItem d:\test -Recurse -Filter *img_*.svg
[IO.Directory]::EnumerateFiles('d:\test\','*img_*.svg','AllDirectories')
второй, в вашем случае, вроде должен работать быстрее, поскольку возвращает не объекты FileInfo а только путь файла.
Дальше сразу подаем на конвейер и обрабатываем так как вам надо.
[IO.Directory]::EnumerateFiles('d:\test\','*img_*.svg','AllDirectories') | foreach {(Get-Content $_ -raw) -replace '.png','.jpg' | Set-Content $_) }
вроде так.
вообще не имел дела с таким объемом файлов, и, скорее всего, все таки будет заниматься достаточно много памяти.
Но проверять - вам )