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


| Следующая

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

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

Const ForReading = 1
Const ForWriting = 2strFileName = 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"