DOS Batch - Find and Replace - Search a file and replace all occurrences of a string with another string

This batch allows string substitution in a text file. It parses each line of a text file for a particular string and replaces it with another string.
I.e. To replace all occurrences of “Yellow Submarine” in “color.txt” with “uboot” and put the output on the screen run:
BatchSubstitute.bat “Yellow Submarine” uboot color.txt
Or
type color.txt|BatchSubstitute.bat “Yellow Submarine” uboot

Optionally pipe the output into a new file, i.e.
BatchSubstitute.bat “Yellow Submarine” uboot color.txt>newfile.txt
Or
type color.txt|BatchSubstitute.bat “Yellow Submarine” uboot>newfile.txt
Note: Due to the nature of the FOR command and string substitution, the following known restrictions apply:

* Lines starting with “]” character will end up empty
* OldStr must not start with “*”

@echo off
REM — Prepare the Command Processor –
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION

::BatchSubstitude - parses a File line by line and replaces a substring”
::syntax: BatchSubstitude.bat OldStr NewStr File
::          OldStr [in] - string to be replaced
::          NewStr [in] - string to replace with
::          File   [in] - file to be parsed
if “%*”==”" findstr “^::” “%~f0″&GOTO:EOF
for /f “tokens=1,* delims=]” %%A in (’”type %3|find /n /v “”"‘) do (
set “line=%%B”
if defined line (
call set “line=echo.%%line:%~1=%~2%%”
for /f “delims=” %%X in (’”echo.”%%line%%”"‘) do %%~X
) ELSE echo.
)

Leave a Reply

You must be logged in to post a comment.