Замена текста в нескольких файлах — возникает ошибка дублирования

Замена текста в нескольких файлах — возникает ошибка дублирования

Я хочу перебрать все файлы (2 для этого теста) в текущей папке и заменить текст.

Замена работает, но у меня остались newfile1 и newfile2 в file1 и то же самое в file 2. А мне просто нужен newfile 1 в file 1 и newfile 2 в file 2.

Предполагаю, что мой ForEach-Object находится в неправильном месте, но не могу это исправить. Есть предложения?

@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

решение1

Это некрасиво, но работает:

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
}

Проблема вашего сценария в том, что вам нужно быть Set-Contentв ForEach-Objectкурсе событий.

Связанный контент