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