How can you find and replace text in a file using the Windows command-line environment?

batch-file, command-line, scripting, text-files, windows

Solution

A lot of the answers here helped point me in the right direction, however none were suitable for me, so I am posting my solution.

I have Windows 7, which comes with PowerShell built-in. Here is the script I used to find/replace all instances of text in a file:

powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt"

To explain it:

- `powershell` starts up powershell.exe, which is included in Windows 7

- `-Command "... "` is a command line arg for powershell.exe containing the command to run

- `(gc myFile.txt)` reads the content of `myFile.txt` (`gc` is short for the `Get-Content` command)

- `-replace 'foo', 'bar'` simply runs the replace command to replace `foo` with `bar`

- `| Out-File myFile.txt` pipes the output to the file `myFile.txt`

- `-encoding ASCII` prevents transcribing the output file to unicode, as the comments point out

Powershell.exe should be part of your PATH statement already, but if not you can add it. The location of it on my machine is `C:\WINDOWS\system32\WindowsPowerShell\v1.0`

Update Apparently modern windows systems have PowerShell built in allowing you to access this directly using

(Get-Content myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt

Problem

I am writing a batch file script using Windows command-line environment and want to change each occurrence of some text in a file (ex. "FOO") with another (ex. "BAR"). What is the simplest way to do that? Any built in functions?

Original source

Related problems