VBS/WSH/JS - Поиск в одном текстовом файле с заменой в другом

Ответить
Аватара пользователя
cortes_

VBS/WSH/JS - Поиск в одном текстовом файле с заменой в другом

Сообщение cortes_ »

Привет всем!

Передо мной встала следующая задача. Есть текстовый файл (исходный):


читать дальше »


Hostname=srv1.corp.contoso.com

IPAddress= 10.1.1.1

Active=True





Есть текстовый второй файл (назначение):


читать дальше »


Server=server

IPAddress= 10.1.1.1

Hostname=server.server

Active=True





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

Я честно пытался реализовать скрипт через регулярные выражения, но не вышло.

Текст скрипта:


читать дальше »






Код:

Код: Выделить всё

Dim objFSO
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Set wshshell = CreateObject("wscript.shell")
workDir = wshshell.ExpandEnvironmentStrings(WshShell.CurrentDirectory)
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = False   
objRegEx.IgnoreCase = True
objRegEx.Pattern = "Hostname=[A-Za-z0-9-]+"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileSrc = objFSO.OpenTextFile(workDir & "\source.txt", 1)
srcString = objFileSrc.ReadLine ' Тут неправильно, читается только первая строка,а не идет поиск по всему файлу
objFileSrc.Close
Set objFileDes = objFSO.OpenTextFile(workDir & "\destination.txt", 2) 
strSearchString = "Hostname="
strNewString = objRegEx.Replace(strSearchString,srcString)
objFileDes.WriteLine strNewString
objFileDes.Close

На всякий случай в приложении тестовые файлы и сам скрипт.
Аватара пользователя
Foreigner

Re: VBS/WSH/JS - Поиск в одном текстовом файле с заменой в другом

Сообщение Foreigner »

Исходя из конкретных файлов. Батник:



Код:

Код: Выделить всё

@echo off
1>dest.tmp (
    findstr /i "hostname" src.txt
    findstr /i /v "hostname" dest.txt
)
move dest.tmp dest.txt

PowerShell:



Код:

Код: Выделить всё

(gc dest.txt) -replace 'hostname=.*',(sls 'hostname' src.txt).line | sc dest.txt
Ответить

Вернуться в «Скриптовые языки администрирования Windows»