Substituindo texto em vários arquivos - obtendo erro duplicado

0

Eu quero percorrer todos os arquivos (2 para este teste) na pasta atual e substituir o texto.

A substituição está funcionando, mas eu fiquei com newfile1 e newfile2 no arquivo1 e o mesmo no arquivo 2. Onde eu quero apenas o newfile 1 no arquivo 1 e o newfile 2 no arquivo 2.

Assumindo que meu ForEach-Object está no lugar errado, mas não consigo consertar. Alguma sugestão?

@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
    
por Steve 16.07.2015 / 08:53

1 resposta

0

Isso não é bonito, mas 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
}

O problema com o seu script é que você precisa de Set-Content no loop ForEach-Object .

    
por 16.07.2015 / 22:51