中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用Reg copy将注册表项A下所有复制到B下,自动应答不改写
作者:
标题: 用Reg copy将注册表项A下所有复制到B下,自动应答不改写 上一主题 | 下一主题
dejoy
初级用户





积分 76
发帖 64
注册 2008-4-24
状态 离线
『楼 主』:  用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)
2009-5-24 10:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 2 楼』:  

可以用 reg query 读取注册表相关项或值,或用 reg export  导出注册表相关项,如果存在相关值就不复制。

2009-5-24 20:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dejoy
初级用户





积分 76
发帖 64
注册 2008-4-24
状态 离线
『第 3 楼』:  

楼上的方法需要递归遍历所有的子键,如何写

2009-5-25 23:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 4 楼』:  注册表项之间的比较和复制方法


@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更易处理,通用性好。

2009-5-28 06:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ypf188
新手上路





积分 7
发帖 10
注册 2006-11-6
状态 离线
『第 5 楼』:  

学习了

2009-5-29 03:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: