@echo off
set "key1=HKEY_LOCAL_MACHINE\SOFTWARE\Test"
set "key2=HKEY_CURRENT_USER\Software\Test"
reg export "%key1%" newxso1.reg >nul
reg export "%key2%" newxso2.reg >nul
(
echo Set objFSO = CreateObject^("Scripting.FileSystemObject"^)
echo Set Fa = objFSO.OpenTextFile^("newxso1.reg", 1, False, -1^)
echo Set Fb = objFSO.OpenTextFile^("newxso2.reg", 1, False, -1^)
echo strText = Fb.ReadAll
echo Do Until Fa.AtEndOfStream
echo strLine = Fa.ReadLine
echo If InStr^(strText, strLine^) = 0 Then
echo strLines = strLines ^& vbCrLf ^& strLine
echo End If
echo Loop
echo strLines = Replace^(strLines, "%key1%", "%key2%"^)
echo Wscript.Echo "Windows Registry Editor Version 5.00" ^& vbCrLf ^& strLines
)>newxso.vbs
cscript //nologo newxso.vbs>newxso.reg
regedit /s newxso.reg
del newxso*.*
以上功能相当于执行以下一行命令,选择不覆盖已存在项目:
reg copy HKLM\SOFTWARE\Test HKCU\Software\Test /s
之前曾经考虑过用 reg compare 命令来比较两个注册表项,找出不同地方来处理,但存在子项的时候,此方法行不通。如果使用全BAT代码形式,在处理存在一些特殊字符时可能出错,在比较文本内容方面,用VBS更易处理,通用性好。