615 Stimmen

Wie können Sie mit der Windows-Befehlszeilenumgebung Text in einer Datei suchen und ersetzen?

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?

4voto

Wagner Pereira Punkte 874

Powershell in .bat verwenden - für Windows 7+

Kodierung utf8 ist optional, gut für Websites

@echo off
set ffile='myfile.txt'
set fold='FOO'
set fnew='BAR'
powershell -Command "(gc %ffile%) -replace %fold%, %fnew% | Out-File %ffile% -encoding utf8"

3voto

madcorp Punkte 321

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).

3voto

Georgie Punkte 78

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'"

2voto

Whome Punkte 9949

@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%"

1voto

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X