Total Commander Knowledge Base

Есть вопрос?

Поищите ответ в самой большой русскоязычной базе знаний по Total Commander!

Поиск и замена текста в файлах

Скрипт, заменяющий все вхождения заданной строки во всех выделенных файлах на другую строку. Архиполезнейшая вещь!

'  File:         ReplaceInFiles.vbs
'  Description:  Производит поиск текста с заменой
'                в выделенных текстовых файлах
'  Installation: Создайте кнопку на панели TC
'                Команда: "диск:\путь\к\файлу\ReplaceInFiles.vbs"
'                Параметры: "%L" (именно в кавычках!)
'  Copyright:    (c) 2006, Volniy

Option Explicit

Dim FSO, Find_String, Replace_String, F, Buffer, ListFile
Const ForReading = 1, ForWriting = 2

Set FSO = CreateObject("Scripting.FileSystemObject")

Find_String = InputBox("Введите искомую строку", "Поиск и замена")
If Len(Find_String) = 0 Then
   MsgBox "Не задана строка поиска!", vbExclamation, "Поиск и замена"
   WScript.Quit()
End If

Replace_String = InputBox("Введите строку для замены", "Поиск и замена")

Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
Do While Not ListFile.AtEndOfStream
   Call DoItForThisFile(ListFile.ReadLine)
Loop
ListFile.Close
Set ListFile = Nothing
Set F = Nothing
Set FSO = Nothing

MsgBox "Замена завершена!", vbInformation, "Поиск и замена"
WScript.Quit

Sub DoItForThisFile(FilePath)
   Set F = FSO.OpenTextFile(FilePath, ForReading)
   Buffer = F.ReadAll
   F.Close

   Buffer = Replace(CStr(Buffer), Find_String, Replace_String, 1, -1, 1)
   FSO.CopyFile FilePath, FilePath & ".bak"

   Set F = FSO.OpenTextFile(FilePath, ForWriting)
   F.Write Buffer
   F.Close
End Sub

Volniy