Пробуйте:
читать дальше »
Код:

Option Explicit
Dim objFSO
Dim strFileMaster
Dim strFileWorking
Dim arrContent
Dim i
Dim objDictionaryMaster
Dim objDictionaryWorking
Dim strKey
If WScript.Arguments.Count = 2 Then
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strFileMaster = WScript.Arguments.Item(0)
If Not objFSO.FileExists(strFileMaster) Then
WScript.Echo "Master file [" & strFileMaster & "] not found."
WScript.Quit 2
End If
strFileWorking = WScript.Arguments.Item(1)
If Not objFSO.FileExists(strFileWorking) Then
WScript.Echo "Working file [" & strFileWorking & "] not found."
WScript.Quit 3
End If
Set objDictionaryMaster = WScript.CreateObject("Scripting.Dictionary")
Set objDictionaryWorking = WScript.CreateObject("Scripting.Dictionary")
With objFSO.OpenTextFile(strFileMaster)
arrContent = Split(.ReadAll(), vbCrLf)
.Close
End With
For i = LBound(arrContent) To UBound(arrContent) - 1
arrContent(i) = Trim(arrContent(i))
If Len(arrContent(i)) <> 0 Then
If Left(arrContent(i), 1) <> "#" Then
If InStr(arrContent(i), "=") > 0 Then
objDictionaryMaster.Add Trim(Split(arrContent(i), "=", 2)(0)), Trim(Split(arrContent(i), "=", 2)(1))
End If
End If
End If
Next
With objFSO.OpenTextFile(strFileWorking)
arrContent = Split(.ReadAll(), vbCrLf)
.Close
End With
For i = LBound(arrContent) To UBound(arrContent) - 1
arrContent(i) = Trim(arrContent(i))
If Len(arrContent(i)) <> 0 Then
If Left(arrContent(i), 1) <> "#" Then
If InStr(arrContent(i), "=") > 0 Then
objDictionaryWorking.Add Trim(Split(arrContent(i), "=", 2)(0)), Trim(Split(arrContent(i), "=", 2)(1))
End If
End If
End If
Next
objFSO.CopyFile strFileWorking, objFSO.GetBaseName(strFileWorking) & ".bak", True
With objFSO.CreateTextFile(strFileWorking, True)
For Each strKey In objDictionaryMaster.Keys
If objDictionaryWorking.Exists(strKey) Then
.WriteLine strKey & " = " & objDictionaryWorking.Item(strKey)
objDictionaryMaster.Remove strKey
objDictionaryWorking.Remove strKey
Else
.WriteLine strKey & " = "
End If
Next
.WriteLine
.WriteLine "# Lines below not found by patterns of Master file [" & strFileMaster & "]:"
For Each strKey In objDictionaryWorking.Keys
.WriteLine strKey & " = " & objDictionaryWorking.Item(strKey)
Next
.Close
End With
Else
WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Master file> <Working file>"
WScript.Quit 1
End If
WScript.Quit 0
Скрипту требуется указать два аргумента: образец, мастер-файл и рабочий, целевой файл. Из мастер-файла берутся левые части строк до символа «=» и их порядок. Из целевого файла убираются пустые строки и строки, начинающиеся на «#». Из остальных строк в порядке, заданном порядком левых частей строк мастер-файла, строится новое содержимое целевого файла.
Если в мастер-файле существуют левые части строк, отсутствующие в целевом файле, то такие строки добавляются в целевой файл с пустыми значениями — пустыми правыми частями после знака равенства.
В конце нового содержимого целевого файла указываются строки оригинального целевого файла, которым не было найдено соответствия с левыми частями строк мастер-файла.
Оригинальное предыдущее содержимое целевого файла остаётся доступным в одноимённом файле с расширением «.bak» (при этом, если таковой .bak файл уже существовал ранее — его содержимое будет утеряно).