Как обойтись без sed в командной строке Windows

less than 1 minute read

Сегодня столкнулся с необходимостью поменять текстовку в сотне файлов на сервере вод управлением Windows.
В среде linux такие задачи решаются просто с помощью sed и ключа ‘-i’, но в среде Windows аналогов sed нету.

Пришлось изощряться. Для начала создал файл C:\repl.vbs со следующим содержанием:

Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText
objFile.Close

Пользоваться им нужно в командной строке следующим образом:

cscript C:\repl.vbs `c:\**имя_файла**.txt` `FOO` `BAR`

Даная конструкция меняет FOO на BAR в файле c:\имя_файла.txt

Вооружившись этой статьей обрабатываем все файлы - ищем FOO и меняем на BAR:

set _find_cmd=findstr /M /P /S /R /I `FOO` *  
for /f `tokens=*` %f IN ('%_find_cmd%') DO cscript c:\repl.vbs `%f` `FOO` `BAR`