每一个熟悉Windows的人都相信,通过注册表几乎可以做到任何事情,真正的问题是怎样迅速找到正确的注册键。
绝大多数情形下,操作注册表意味着找到某个特定的子键;偶尔地,可能需要修改一下子键的名称(例如,可能要进行结构上的改动)。那么,怎样才能迅速找到正确的子键并执行修改?另外,如果你不仅要改动本地机器的注册表,而且还要对远程机器作同样的修改,该怎么办?本文告诉你一个好工具Regfind。Regfind可以从Windows 2000 Server的Resource Kit Supplement One找到,或者从网上下载。Regfind适用于Windows的各个版本,包括Windows 9x系列。
Regfind是一个命令行工具。不带任何选项执行Regfind,它将显示出帮助信息。最简单的用法是执行查找,例如执行Regfind "QQ",Regfind将找出所有包含字符串“QQ”的注册键,如图一所示。
图1
除了单纯的查找之外,Regfind还能够执行替换:只需在图一的命令后加上-r选项和一个替换字符串即可。例如,假设你公司的名称从AGroup改成了BGroup,现在你想要对注册表中所有的产品注册信息作相应的改动,只需执行:Regfind "AGroup" -r "BGroup"。注意,如果搜索字符串包含空格或标点符号,字符串应该用引号包围。
如果要对一台远程机器作相应的改动,只需在前面的命令后加上-m选项并指定远程机器的UNC(Universal Naming Convention,通用命名协定)路径,例如:Regfind -m\\server03 "AGroup" -r "BGroup"。
搜索整个注册表无疑是一件相当耗费时间的事情。为了提高效率,你可以将Regfind的搜索操作限制到某个注册表的分支或子键,只需要在-p选项后面指定要搜索的注册表位置即可。例如,假设要把搜索“AGroup”的操作限制在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft子键,并把该子键下的AGroup替换成BGroup,执行:Regfind "AGroup" -r "BGroup" -p "HKEY_LOCAL_MACHINESOFTWARE\Microsoft"。
通过上面的说明可以看出,Regfind是一个很方便的工具,但白璧有瑕,有时候你仍会感到它不能满足要求。首先,Regfind不支持通配符,也不支持正则表达式——而这两者对于执行复杂搜索是非常有用的。唯一一个给搜索操作增加灵活性的选项是-y。-y选项使得Regfind的搜索操作对大小写不敏感,即如果你执行Regfind AGroup -y,则Regfind的搜索结果中将包含AGroup、aGroup以及其他字母大小写的组合(如果没有-y选项,Regfind默认对大小写敏感,但Regfind的命令选项对大小写不敏感,例如你可以随意使用-R或-r)。
第二,如果用Regfind执行搜索/替换操作,它将替换所有找到的字符串,你不能要求Regfind只替换其中一个字符串。勉强可算是补救策略的方法是:将搜索操作限制在某个特定的注册表分支。因此,我的建议是:首先用Regfind找出所有匹配的注册子键,然后用Regfind执行全局替换或手工修改某个特定的子键。
第三,如果你想要修改数值型数据,Regfind似乎算不上最佳帮手。这是因为,许多要处理的REG_DWORD值不是0就是1,而0和1在注册表中出现的机会实在太频繁了,很可能出现误替换的情形。解决问题的唯一办法就是尽可能精确地限定Regfind的搜索范围。