Reemplazar texto en varios archivos y obtener un error duplicado

Reemplazar texto en varios archivos y obtener un error duplicado

Quiero recorrer todos los archivos (2 para esta prueba) en la carpeta actual y reemplazar el texto.

El reemplazo está funcionando, pero me quedan newfile1 y newfile2 en el archivo1 y lo mismo en el archivo 2. Donde solo quiero newfile 1 en el archivo 1 y newfile 2 en el archivo 2.

Suponiendo que mi ForEach-Object está en el lugar equivocado pero no puedo solucionarlo. ¿Alguna sugerencia?

@echo off
call:DoReplace "a1" "a2" *.txt "a3" "a4" 
exit /b

:DoReplace
echo ^(Get-Content "%3"^) ^| ForEach-Object { $_ -replace %1, %2 -replace %4, %5} ^| Set-Content %3>Rep.ps1 
Powershell.exe -executionpolicy ByPass -File Rep.ps1
if exist Rep.ps1 del Rep.ps1
echo Done
pause

Respuesta1

Esto no es bonito, pero funciona:

Get-ChildItem \\path\to\folder -Filter '*.txt' | foreach {
$text = Get-Content $_.FullName
$text = $text -replace 'a2','test'
$text = $text -replace 'a4','foo'
$text | Set-Content $_.FullName
}

El problema con tu script es que necesitas estar Set-Contenten el ForEach-Objectbucle.

información relacionada