Ich schreibe ein Stapeldatei-Skript mit der Windows-Befehlszeilenumgebung und möchte jedes Vorkommen eines Textes in einer Datei (z. B. "FOO") durch einen anderen (z. B. "BAR") ersetzen. Wie lässt sich das am einfachsten bewerkstelligen? Gibt es eingebaute Funktionen?
Antworten
Zu viele Anzeigen?Ich stehe gerade vor einem ähnlichen Problem - "Suchen und Ersetzen von Text in Dateien", aber mit dem Unterschied, dass ich sowohl für Dateinamen als auch für Suchen/Reparieren Regex verwenden muss. Da ich mit Powershell nicht vertraut bin und meine Suchen zur späteren Verwendung speichern möchte, brauche ich etwas "benutzerfreundlicheres" (vorzugsweise mit GUI).
Also, beim Googeln :) habe ich ein tolles Tool gefunden - FAR (Suchen und Ersetzen) (nicht FART).
Das kleine Programm hat eine schöne GUI und unterstützt Regex für die Suche in Dateinamen und innerhalb von Dateien. Der einzige Nachteil ist, dass Sie das Programm als Administrator ausführen müssen, wenn Sie Ihre Einstellungen speichern wollen (zumindest unter Win7).
Um sicher zu sein, dass die Kodierung (von UTF-8) nicht geändert wird und die Akzente beibehalten werden, gab es für mich nur die Möglichkeit, die Standardkodierung vor und nach :
powershell -Command "(gc 'My file.sql' -encoding "Default") -replace 'String 1', 'String 2' | Out-File -encoding "Default" 'My file.sql'"
@Rachel hat eine ausgezeichnete Antwort gegeben, aber hier ist eine Variation davon, um Inhalte in eine Powershell zu lesen $data
variabel. Sie können den Inhalt dann problemlos mehrfach bearbeiten, bevor Sie ihn in eine Ausgabedatei schreiben. Sehen Sie sich auch an, wie mehrzeilige Werte in einer .bat-Batchdatei angegeben werden.
@REM ASCII=7bit ascii(no bom), UTF8=with bom marker
set cmd=^
$old = '\$Param1\$'; ^
$new = 'Value1'; ^
[string[]]$data = Get-Content 'datafile.txt'; ^
$data = $data -replace $old, $new; ^
out-file -InputObject $data -encoding UTF8 -filepath 'datafile.txt';
powershell -NoLogo -Noninteractive -InputFormat none -Command "%cmd%"
Das ist eine Sache, die die Batch-Skripterstellung einfach nicht gut kann.
Das Drehbuch mehrchilli funktioniert bei einigen Dateien, leider aber nicht bei solchen, die Zeichen wie Pipes und Ampersands enthalten.
VBScript ist ein besseres integriertes Werkzeug für diese Aufgabe. In diesem Artikel finden Sie ein Beispiel: http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx