批处理检测注册表项目是否存在并运行指定命令
要实现上面说的功能就必须要用到批处理操作注册表命令「REG QUERY」,这个命令的大体功能就是可以查询相关注册表项目。
先来看下「REG QUERY」命令介绍:
REG QUERY KeyName [/v ValueName | /ve] [/s]
KeyName [\Machine\]FullKey
Machine 远程机器名 – 忽略当前机器的默认值,远程机器上只有 HKLM 和 HKU。FullKey 格式为 ROOTKEY\SubKey。ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]SubKey 所选 ROOTKEY 下的注册表项的全名。
/v 参数的意思是查询特定注册表项,ValueName 所选项下的要查询的值的名称,省略时,该项下的所有值都会得到查询。
/ve 查询默认值或空白值名称<no name>
/s 查询所有子项和值
例如:
REG QUERY HKLM\Software\Microsoft\ResKit /v Version 显示注册表值 Version 的值
REG QUERY HKLM\Software\Microsoft\ResKit\rt\Setup /s 显示注册表项 Setup 下的所有子项和值
现在知道「REG QUERY」命令可以读取注册变项目并返回相关结果,就可以通过批处理根据返回值来写注册表了。
先看下下面完整的一个实例代码,是刚发布「ICL-Icon Extractor 5.12 绿色特别版│好用图标批量搜索提取工具」软件的绿化源码:
- @echo off
- reg query HKCU\Software\IconEmpire\IconExtractor\Registered /v Key>nul 2>nul&&goto A||goto B
- :A
- start iconextract.exe
- exit
- :B
- start iconextract.exe
- reg add "HKEY_CURRENT_USER\Software\IconEmpire\IconExtractor\Registered" /v "Key" /d "9m888x9998888p" /f
- reg add "HKEY_CURRENT_USER\Software\IconEmpire\IconExtractor\Registered" /v "UserName" /d "V5PC" /f
- reg add "HKEY_CURRENT_USER\Software\IconEmpire\IconExtractor\Registered" /v "Email" /d "V5PC@PC.COM" /f
- start iconextract.exe
- exit
- pause>nul
好接下来简单分析下这个代码:
- reg query HKCU\Software\IconEmpire\IconExtractor\Registered /v Key>nul 2>nul&&goto A||goto B
由于这个程序的注册表信息保存在「HKCU\Software\IconEmpire\IconExtractor\Registered」「Key」这个值项中,所以通过「reg query」命令来读取这个值项中有没有数据。
「/V」参数就是只读指定「Key」中的数据。
「2>nul」是不显示错误提示,如果是「1>nul」意思是不显示命令运行的正确提示,「>」是重定向符号,「nul」是空设备的意思。
「&&」顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令。
「||」 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令。
「goto A」和「goto B」是跳转指令,具体要跳到那里「A」还是「B」就要看返回值了并且是通过「||」控制走向。
- :A
- start iconextract.exe
- exit
下面的指令就简单了,如果跳转到A就通过下面的「start」运行程序就行了,「exit」是退出。
- :B
- start iconextract.exe
- reg add "HKEY_CURRENT_USER\Software\IconEmpire\IconExtractor\Registered" /v "Key" /d "9m888x9998888p" /f
- reg add "HKEY_CURRENT_USER\Software\IconEmpire\IconExtractor\Registered" /v "UserName" /d "V5PC" /f
- reg add "HKEY_CURRENT_USER\Software\IconEmpire\IconExtractor\Registered" /v "Email" /d "V5PC@PC.COM" /f
- start iconextract.exe
- exit
- pause>nul
如果跳转到B就通过「reg add」添加注册表项,后面同样也是通过「start」运行程序,「exit」代码退出,最后一句「pause」是暂停这句多余了,因为不等走到这句代码就已经退出了。