Ersetzen von Text in mehreren Dateien – es tritt ein Duplikatsfehler auf

Ersetzen von Text in mehreren Dateien – es tritt ein Duplikatsfehler auf

Ich möchte alle Dateien (2 für diesen Test) im aktuellen Ordner durchlaufen und Text ersetzen.

Der Ersatz funktioniert, aber ich habe noch newfile1 und newfile2 in Datei1 und das Gleiche in Datei 2. Dabei möchte ich nur newfile 1 in Datei 1 und newfile 2 in Datei 2.

Ich nehme an, mein ForEach-Objekt ist an der falschen Stelle, kann es aber nicht reparieren. Irgendwelche Vorschläge?

@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

Antwort1

Das ist nicht schön, aber es funktioniert:

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-ContentDas Problem mit Ihrem Skript besteht darin, dass Sie es in einer Schleife benötigen ForEach-Object.

verwandte Informationen