Поиск и замена данных в фалах

Поиск и замена данных в файле в выбранной папке и подпапках если они есть
Данный скрипт производит поиск всех совпадений в файле
Есть возможность указать папку или же делать выбор папки по средствам диалога с Windows


'Создаём и запускаем диалог выбора корневой папки
'Set objShell = CreateObject("Shell.Application")
'Set objFolder = objShell.BrowseForFolder(0, "Select a folder:", 0)
'Если пользователь не выбрал папку, завершаем приложение
'If objFolder Is Nothing Then Wscript.Quit
'Получаем путь к выбранной папке
'objPath = objFolder.Self.Path

'или Указываем папку самостоятельно
objPath = "c:\temp\ip"

'Создаем объект папки файловой системы
'и отправляем его в рекурсивную функцию
Set FSO = CreateObject("Scripting.FileSystemObject")
Set vFSO = FSO.GetFolder(objPath)
'обрабатываем файлы в папке родителе
filesJob(vFSO.Files)
'проверяем папку на содержание подпапок
ShowSubFolders vFSO

' Функция редактирования файла
Sub EditFiles(vFile)
Const ForAppending = 8

Dim strString4Find
Dim strString4Replace
Dim boolIsCaseReplacing
Dim boolIsLogging
Dim strPath2LogFile

Dim objFSO
Dim strSourceFile
Dim strContent
Dim boolFound

' тут берем имя и путь к файлу
strSourceFile = vFile
' искомый текст
strString4Find = "192.168.0.1"
' на что будем менять
strString4Replace = "10.33.0.1"
boolIsCaseReplacing = True
' запись логов
boolIsLogging = True
strPath2LogFile = "C:\temp\replace.log"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If boolIsLogging Then
If Not objFSO.FolderExists(objFSO.GetParentFolderName(strPath2LogFile)) Then
WScript.Echo "Can't find logging folder [" & objFSO.GetParentFolderName(strPath2LogFile) & "]."
WScript.Quit 1
End If
End If

If objFSO.FileExists(strSourceFile) Then
With objFSO.OpenTextFile(strSourceFile)
strContent = .ReadAll()
.Close
End With

boolFound = False

If boolIsCaseReplacing Then
If InStr(1, strContent, strString4Find, vbTextCompare) > 0 Then
boolFound = True
strContent = Replace(strContent, strString4Find, strString4Replace, 1, -1, vbTextCompare)
End If
Else
If InStr(1, strContent, strString4Find, vbBinaryCompare) > 0 Then
boolFound = True
strContent = Replace(strContent, strString4Find, strString4Replace, 1, -1, vbBinaryCompare)
End If
End If

If boolFound Then
With objFSO.CreateTextFile(strSourceFile, True)
.Write strContent
.Close
End With

End If
End If

Set objFSO = Nothing

End Sub

sub ShowSubFolders(Folder)

'Перебираем подпапки
For Each Subfolder in Folder.SubFolders
'В каждой подпапке Subfolder делаем нужное нам черное дело
'Например, выводим её имя
'Wscript.Echo Subfolder
'запускаем перебор файлов в данной папке
filesJob(Subfolder.Files)

'Рекурсивно вызываем функцию для подпапок текущей папки
ShowSubFolders Subfolder
Next

End Sub

Sub filesJob(files)
For Each objFile in files
EditFiles(objFile)
Next
End sub

Добавить комментарий