中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-16 09:22
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 大虾级问题,关键词:批处理、注册表。期待斑竹! 查看 1,429 回复 12
楼 主 大虾级问题,关键词:批处理、注册表。期待斑竹! 发表于 2006-04-04 16:06 ·  中国 湖南 长沙 岳麓区 电信
新手上路
积分 8
发帖 2
注册 2006-04-04 15:27
UID 53316
性别 男
状态 离线
各位大虾,小弟弟第一次来,问一个对我来说很深的问题。
实现效果:
每次重新启动,系统便会调用备份的注册表。在系统启动后所作的一切注册表修改,都会在系统重新启动后调用备份的注册表。
要求在win98、win2K、winxp、win2k3都能实现

本人想的思路是:
利用批处理
删除整个注册表
调用备份注册表

但是本人能力有限,无法实现,期待高手的出现。
2 发表于 2006-04-04 17:43 ·  中国 北京 朝阳区 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
OH ,MY GOD.....不知道是楼主发烧还是我发烧.........删除注册表?????在说一句“OH ,MY GOD!"
3 发表于 2006-04-04 17:54 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
为什么要备份和恢复整个注册表呢?如果是我会有选择地备份。。
不过按照你的思路可以提供方法给你:
备份注册表的命令: regedit /e c:\bak.reg
导入注册表的命令: regedit /s c:\bak.reg
虽然regedit命令在98和XP下都能运行,但是对于XP来说,涉及到权限等等情况,也许不一定能恢复成功(这只是我的意见。)
如果是98的话建议你只是备份System.dat和User.dat就行了,然后等想恢复的时候再恢复。
毕竟每次启动的时候恢复注册表是要等上一段时间的。
ps:个人认为这个问题还算不上什么大虾级的问题吧。。
4 发表于 2006-04-04 18:08 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
xp也能通过直接备份注册表文件的方式来备份注册表,不过前提是xp没有在运行状态。而恢复备份的注册表,也是同样的要求。

个人认为,这确实不是一个大虾级的问题。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
5 发表于 2006-04-05 00:06 ·  中国 湖北 武汉 电信
初级用户
★★
积分 168
发帖 85
注册 2005-08-26 00:19
UID 41941
性别 男
状态 离线
Originally posted by 3742668 at 2006-4-4 17:54:
备份注册表的命令: regedit /e c:\bak.reg
导入注册表的命令: regedit /s c:\bak.reg


我也看到过别人提到一个 regedit -m打开两个regedit.exe

请问 regedit 的这些参数是如何获得的?
我到微软官方网站搜索,找了很久就是找不到全面介绍这些参数的~~
6 发表于 2006-04-05 00:23 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
DOS下regedit /?
我以前用98的时候专门看过的,所以还有点印象,不过在XP的命令行中运行regedit /?看不出来了,但是regedit /s和regedit /e还是能执行。
7 发表于 2006-04-05 08:37 ·  中国 湖南 长沙 岳麓区 电信
新手上路
积分 8
发帖 2
注册 2006-04-04 15:27
UID 53316
性别 男
状态 离线
也许本人没有叙述清楚
本人的意思就是
在装好系统和应用软件后,系统交给用户使用,使用户不能通过安装应用程序往注册表中添加信息。即使安装了需要往注册表中添加信息中的软件,在重新启动后,也会因为注册表被复原而无法正常运行。。。(绿色软件除外)

按照3楼的意见,是 不是可以在系统运行前,在组策略中执行批处理命令
regedit /s e:\bak.reg
注释:bak.reg为系统安装后导出的注册表。这样,每次重新启动系统,使用的就是bak.reg了。
但是我在考虑这样的问题,假如用户在注册表中添加了新的信息后,再导入bak.reg,是不是会引起系统错误,(新添加的信息是否被清除)
8 发表于 2006-04-05 10:41 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
首先,如果你的注册表中更改了设置时,导入bak.reg会修改为bak.reg中的值,但是如果键是添加上去的,导入bak.reg的时候并不会删除已经建立的值(这也是为什么我说在98系统下最好是备份和恢复system.dat和user.dat的原因)。在98下面我们可以在autoexec.bat或win.bat等中恢复system.dat和user.dat来实现真正地恢复注册表的目的,但是在XP下此方法并不实用。而且随着软件的变化而注册表不相映地配置得当的话,可能会导致软件无法正常使用等等莫名其妙的情况。所以基本上是不要干这种吃力不讨好的事情,至于实现你想实现的目的,在XP环境中你只需要建立一个权限比较低的用户就可以了,比如users组的就可以。如果你硬是要自己来修改注册表的话也不是不行,你可以每次先导处注册表,然后利用批处理把每个以"["开头的行提取出来,再在提出的文件的第二个有效字符前插入一个减号"-",比如原内容为:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
只需要改为
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
就行了,然后再把更改过的reg文件导入,这就实现了删除所有子键(当然,你也可以直接把各个根键下的子键名记下来,然后在批处理中直接删除这些子键即可)。
删除键后再把bak.reg导入即可。
还是不推荐用这种最笨最没有效率且最危险的方法来维护安全。
9 发表于 2006-04-05 13:12 ·  中国 湖北 武汉 电信
初级用户
★★
积分 168
发帖 85
注册 2005-08-26 00:19
UID 41941
性别 男
状态 离线
再学习一下~~
10 发表于 2006-04-05 18:33 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
装个硬盘保护卡倒是相当的简单。也能满足楼主的需要。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
11 发表于 2006-05-11 13:26 ·  IANA 局域网IP(Private-Use)
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
regedit /c 好像可以用.reg重建注册表
12 发表于 2006-05-11 19:00 ·  中国 山西 临汾 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re shgengen:

根据你在7楼需求描述,感觉与网吧系统的维护有些相似性。这种情况下,通常是不会采用恢复注册表的方式来限制非绿色应用程序的使用的,这种方法除了复杂度大、兼容性差、危险性高等缺点外,还具有易产生冗余文件的缺陷。因此,此类需求通常采用以下方案。

一、Climbing兄在10楼提到的硬盘保护卡或者硬盘还原类软件,对系统盘进行写保护,使之每次启动后可以自动恢复初始状态,绿色软件可以安装在非系统盘而不受影响。

二、使用类似一键还原的自启动型镜像还原软件,预先对系统盘进行备份,在系统盘发生较大变化后进行恢复。因为恢复所需时间较方案一长很多,所以恢复周期也需要适当加长,比如每天的第一次启动时恢复,而非每次启动时恢复。

另外,Win9x下有现成的恢复注册表工具,scanreg.exe/scanregw.exe,将 scanreg /restore 写入到 autoexec.bat 中,或者将 scanregw /restore 写入到注册表的 run 启动项下,可以使其启动时自动恢复注册表。

[ Last edited by willsort on 2006-5-11 at 19:36 ]
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
13 发表于 2006-05-11 23:07 ·  中国 上海 杨浦区 电信
高级用户
★★
积分 653
发帖 252
注册 2006-04-16 19:48
UID 53939
状态 离线
用regedit的导入、导出功能涉及到数据表示的转换(二进制数据<->纯文本数据)。在典型配置中,每次启动对整个注册表做这样的转换,耗时太过巨大了。还不如用磁盘映像恢复合算,除非你磁盘IO巨慢但CPU巨快(一个是计算密集型一个是IO密集型)。

如果仅仅要完整恢复注册表,用文件覆盖是最简单高效的做法,但是NT Kernel的OS要在系统启动(注册表文件被装载并锁定)前执行覆盖比较麻烦,好像有两种办法

【方法一】
1. 开机自检
2. 从MBR装入boot manager,发现是单数次启动
3. 装入一个独立的DOS系统
4. [可选]装入NTFS文件系统驱动
5. 用备份的注册表文件覆盖系统文件
6. 重启机器,再次装入boot manager,发现是偶数次启动
7. 装入NT/2k/XP/2k3

显然,这个方案必须有个支持某些非易失标志位判断的boot manager。

【方法二】
1. 开机自检
2. 从MBR启动独立的DOS系统
3. [可选]装入NTFS文件系统驱动
4. 用备份的注册表文件覆盖系统文件
5. 加载GRUB4DOS,并用它加载NT系列OS

就是不知道GRUB4DOS能不能直接在DOS下加载NT Kernel。就算可以,似乎也要吃掉最少1M左右的内存。
论坛跳转: