Posted By: Ray Vega
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?
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:
powershellstarts 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
gcis short for the
-replace 'foo', 'bar'simply runs the replace command to replace
| Out-File myFile.txtpipes the output to the file
-encoding ASCIIprevents 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
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