标题: 用Reg copy将注册表项A下所有复制到B下,自动应答不改写
[打印本页]
作者: dejoy
时间: 2009-5-24 10:31
标题: 用Reg copy将注册表项A下所有复制到B下,自动应答不改写
用Reg copy将注册表项A下的所有子项和值复制到B下,如何自动应答不改写现存的子键和值
请教一条自动应答的问题,我要把一个注册表键下所有项复制到另一个,不覆盖已有的项。正常复制所有的命令是REG COPY HKLM\Software\Test HKCU\Software\Test /s ,然后在提示“值 已存在。要将其改写吗(是/否/全部)?”按N后回车。如果加/f参数,则自动覆盖. 我想不覆盖已在的键及值,实现自动应答"否",用以下echo n| REG COPY HKLM\Software\Test HKCU\Software\Test /s 却不对,貌似进死循环了(自动应答N对del命令是有效的)。请教各位大大
附测试用的test.reg.
我的平台为win2003 sp2
[
Last edited by dejoy on 2009-5-24 at 10:38 ]
附件
1:
Test.rar (2009-5-24 10:31, 2.06 K,下载次数: 12)
作者: newxso
时间: 2009-5-24 20:26
可以用
reg query 读取注册表相关项或值,或用
reg export 导出注册表相关项,如果存在相关值就不复制。
作者: dejoy
时间: 2009-5-25 23:05
楼上的方法需要递归遍历所有的子键,如何写
作者: newxso
时间: 2009-5-28 06:57
标题: 注册表项之间的比较和复制方法
@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更易处理,通用性好。
作者: ypf188
时间: 2009-5-29 03:16
学习了