昨天一个同事抱怨我维护的一个产品修改设置比较麻烦,能不能写个批处理脚本去执行。我自己想想好像也是那么一回事,之前还让客户去修改注册表什么的。我当初连注册表怎么进入都不知道,也是各种度娘。于是开始写一个批处理。
先看看批处理注册表语法 :reg /?可以查看
主要命令有如下几条:
REG Operation [Parameter List]
Operation [ QUERY | ADD | DELETE | COPY |
SAVE | LOAD | UNLOAD | RESTORE |
COMPARE | EXPORT | IMPORT | FLAGS ]
返回代码: (除了 REG COMPARE)
0 - 成功
1 - 失败
要得到有关某个操作的帮助,请键入:
REG Operation /?
例如:
REG QUERY /?
REG ADD /?
REG DELETE /?
REG COPY /?
REG SAVE /?
REG RESTORE /?
REG LOAD /?
REG UNLOAD /?
REG COMPARE /?
REG EXPORT /?
REG IMPORT /?
REG FLAGS /?
每一个对应的不同的方法:
我们来看看等下要用到的reg add命令
REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]
[/reg:32 | /reg:64]
KeyName [\\Machine\]FullKey
Machine 远程机器名 - 忽略默认到当前机器。远程机器上
只有 HKLM 和 HKU 可用。
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下注册表项的完整名称。
/v 所选项之下要添加的值名称。
/ve 为注册表项添加空白值名称(默认)。
/t RegKey 数据类型
[ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ |
REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ]
如果忽略,则采用 REG_SZ。
/s 指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符
如果忽略,则将 "\0" 用作分隔符。
/d 要分配给添加的注册表 ValueName 的数据。
/f 不用提示就强行覆盖现有注册表项。
/reg:32 指定应该使用 32 位注册表视图访问的注册表项。
/reg:64 指定应该使用 64 位注册表视图访问的注册表项。
例如:
REG ADD \\ABC\HKLM\Software\MyCo
添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo
REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead)
REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail
添加一个值(名称: MRU,类型: REG_MULTI_SZ,数据: fax\0mail\0\0)
REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%)
注意: 在扩充字符串中使用插入符号 ( ^ )
好了,了解了基本语法之后就可以开始写了。
首先我这脚本的需要做的事情是。修改注册表和重启服务。
@reg add HKEY_LOCAL_MACHINE\SOFTWARE\MY-SYSTEMS\ /v “test” /t REG_DWORD /d 2 /f>nul
sc stop XX.exe
sc start XX.exe
然后我们将文件保存为bat后缀。
然后直接运行,最后发现竟然报服务器拒绝错误。后来想想注册表是一个权限很高的地方,所以直接右键使用管理员权限打开。OK了。
接下来再继续写第二个脚本。这个批处理的功能是修改注册表,然后重新打开这个软件
@reg add HKEY_CURRENT_USER\Software\MY-SYSTEMS\CCC /v ATEST /t REG_DWORD /d 1 /f>nul
taskkill /f /im XX.exe
start "" "C:\Program Files (x86)\XXr\Runtime\bin\XX.exe"
同样管理员权限运行Ok!