标题: [原创] 【续】[一日一教学](30)操控注册表:reg [打印本页]
作者: Hello123World 时间: 2011-9-9 17:26 标题: 【续】[一日一教学](30)操控注册表:reg
本帖最后由 Hello123World 于 2012-4-13 17:57 编辑
【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html
帮助信息:- 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,全英文registry,意为:注册;这里可以引申为注册表。
reg命令下辖12个操作开关,每个操作开关又有众多的参数;
在批处理中最强大的命令无疑是for,但是最给力的绝对是reg(除了给力,我不知道该怎么形容了);
reg命令可直接操作注册表,注册表是windows的数据库,所以关键不是reg而是注册表!但reg既然可以操作注册表,那么即便关键不是reg,那也是reg。
注册表(Registry)是一个系统设置数据库,它存放了系统软件与硬件设置,同时网络运行设置也放在其中,可见其在系统启动、运行等方面的重要性。
为了直观的显示此命令究竟是怎么给力的,展示两个常用的功能。
1.增加系统启动项(一般是把文件拖到开始菜单——程序——启动,实现开机自启动;删除开机启动一般是在 msconfig /4 中设置)- @echo off
- echo 修改系统启动项
- set /p girl=输入要添加的程序的名称:
- set /p boy=输入该程序的完全路径:
- reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v %girl% /d %boy% /f
复制代码
2.qq自启动。- @echo off
- reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v qq /d "F:\腾讯软件\qq\qq.exe" /f
复制代码
将F:\腾讯软件\qq\qq.exe改成对应的完全路径即可。
参数详解:
展示完了,那就先从reg add说起。
reg add帮助:- REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]
-
- 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 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_MUTLI_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 KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]
reg add 下辖6个参数。
add,全英文add,意为:添加。
keyname,全英文keyname,意为:键名。
/v,全英文value,意为:值;这里引申为值名。
/ve,全英文value empty。意为:空值;这里引申为值名。(感谢cb02356828 的单词提供!)
/t,全英文type,意为:类型;
/s,全英文separator,意为:分隔符;
/d,全英文data,意为:数据;这里为了以区分方式加强记忆,可以多记几个单词,date(日期),dota(魔兽争霸rpg)。
/f,全英文force,意为:强迫;这里引申为强制。
这里出现了很多的新名词,有必要讲解一下这些新名词的含义(括号中是实际称谓),键名(项),值名(键名),值(键值);
例如:- reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v qq /d "F:\腾讯软件\qq\qq.exe" /f
复制代码
其中,
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run就是“项”;
qq就是“键名”;可以自己设置。
F:\腾讯软件\qq\qq.exe就是“键值”;这里是我电脑上qq.exe的完全路径,根据自己电脑本身的qq.exe路径填写。
运行这段代码后,每次计算机启动都会自动运行qq.exe,实现qq的自动登录;(qq本身是可以设置自动登录的,但不少无名气的小软件本身都不可以定义自启动,这时候添加自启动的reg add 代码就用的上了)
REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%)
注意: 在扩充字符串中使用插入符号 ( ^ )
上面这段引用的意思就是,在“键值”有特殊符号时,需要用^加以转义,要添加键值“%systemroot%”,就必须写成“^%systemroot^%”。
再以一个例子说明:- @echo off
- title 信长之野望12pk改变窗口模式工具 by helloworld
- set /p a=1.全屏2.窗口(输入1或者2):
- if %a%==1 reg add "HKCU\Software\KOEI\Nobunaga12pk tc\Configs" /v FullScreen /t REG_DWORD /d 1 /f && echo 信长之野望12pk将会以全屏启动
- if %a%==2 reg add "HKCU\Software\KOEI\Nobunaga12pk tc\Configs" /v FullScreen /t REG_DWORD /d 0 /f && echo 信长之野望12pk将会以窗口启动
- pause>nul
复制代码
语法:reg add 项 /v 键名 /t 键值类型 /d 键值 /f(强制执行)
结合前面的两个代码,其实不难看出,在reg add命令中,最常用的就是 /v /d /f 三个参数,/value后跟键名,/data后跟键值,/force 表示强制执行。
这里以reg add为基础,全面的解析reg命令:
注册表就是上面那么4个关键的东西:项、键名、键值类型、键值;4个以外,再无其它;
因此,reg命令操作对象也就不过这4个东西,不管是add也好、delete也好、query也好,统统都是如此。
“师傅领进门,修行在个人”,以下只给出每个子命令的大致用法(reg add中的参数在不少其它的reg子命令中可以通用),不再阐述每个具体参数的意义(括号中是中文翻译)。
REG QUERY /? query(查询),用来查询具体的项、键名、键值。
例子:- ::获取ie缓存文件夹位置
- set zcb=
- set hc=
- set weizhi=
- set "zcb=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- for /f "tokens=1* delims=Z" %%i in ('reg query "%zcb%" /v cache') do set "weizhi=%%j"
- set "hc=%weizhi:~1%"
- for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"
- echo ie缓存文件夹位置:%hc%
复制代码
ie缓存文件夹位置,在windowsxp和windows7中的位置是有差别的,但是在注册表中存储“ie缓存文件夹位置”的地址却是一样的,某种意义上来说,注册表可以解决批处理的兼容性,换句话说,
REG ADD /? add(添加),用来添加具体的项、键名、键值。
REG DELETE /? delete(删除),用来删除具体的项、键名、键值。
REG COPY /? copy(复制),用来复制具体的项、键名、键值到另一个具体的项、键名、键值。
REG SAVE /? save(保存),用来保存具体的项、键名、键值,到以hiv为扩展名的文件中。(可以想象,必有一个还原hiv文件的reg子命令)
例子:- REG SAVE HKLM\Software\MyCo\MyApp c:\AppBkUp.hiv
- ::将配置单元 MyApp 保存到c盘中的文件 AppBkUp.hiv
复制代码
REG RESTORE /? restore(还原),覆盖方式还原以hiv为扩展名的文件,到具体的项、键名、键值中。(跟reg save相对应)
例子:- REG SAVE HKLM\Software\MyCo\MyApp c:\AppBkUp.hiv
-
复制代码
REG LOAD /? load(加载),追加方式还原以hiv为扩展名的文件,到具体的项、键名、键值中。(跟reg save相对应)
例子:- REG LOAD HKLM\TempHive TempHive.hiv
- 将文件 TempHive.hiv 加载到注册表项 HKLM\TempHive
复制代码
“restore等同于>,load等同于>>”——类似这样。
REG UNLOAD /? unload(卸载),将加载子命令load的操作删除。
例子:- REG UNLOAD HKLM\TempHive
- 卸载 HKLM 中的配置单元 TempHive
复制代码
REG COMPARE /? compare(比较),用来比较具体的项、键名、键值和另一个具体的项、键名、键值。
例子:- REG COMPARE HKLM\Software\MyCo\MyApp HKLM\Software\MyCo\SaveMyApp
- 将注册表项 MyApp 下的所有值跟 SaveMyApp 比较
复制代码
REG EXPORT /? export(输出),用来保存具体的项、键名、键值,到以reg为扩展名的文件中。(常说的“备份注册表”就是这个了)
例子:- REG EXPORT HKLM\Software\MyCo\MyApp AppBkUp.reg
- 将注册表项 MyApp 的所有子项和值导出到文件 AppBkUp.reg
复制代码
REG IMPORT /? import(输入),有备份就有还原,export的逆操作。(不需要加项,会自动添加到具体位置)- REG IMPORT AppBkUp.reg
- 从文件 AppBkUp.reg 导入注册表项
复制代码
REG FLAGS /? flags(标识),密钥?- REG FLAGS HKLM\Software\MyCo\MyApp QUERY
- 显示密钥 MyApp 的当前标志。
复制代码
扩展阅读:
1.注册表和注册表编辑器。
还是引那句拗口的话来说明,“reg命令可直接操作注册表,注册表是windows的数据库,所以关键不是reg而是注册表!但reg既然可以操作注册表,那么即便关键不是reg,那也是reg。”
同样的道理,注册表编辑器可直接操作注册表,注册表是windows的数据库,所以关键不是注册表编辑器而是注册表!但注册表编辑器既然可以操作注册表,那么即便关键不是注册表编辑器,那也是注册表编辑器。
注册表编辑器就是个软件,软件名为regedit.exe,作用和reg命令一样都是用来操作注册表。
注册表是windows的数据库。
2.注册表主要的根键。
注册表有5个根键,分别是(括号中表示该根键所掌管的数据——有遗漏,无错误):
HKEY_CLASSES_ROOT(已在计算机上注册的所有com服务器和与应用程序相关联的所有文件扩展名)
HKEY_CURRENT_USER(当前用户配置信息)
HKEY_LOCAL_MACHINE(该计算机对于任意用户的配置信息,掌管数据最多)
HKEY_USERS(系统默认用户配置信息)
HKEY_CURRENT_CONFIG(硬件配置文件信息)
其中,HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG都是HKEY_LOCAL_MACHINE的子项,分别对应于HKEY_LOCAL_MACHINE\SOFTWARE\Classes、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
3.键值的数据类型。
[ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ |
REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ]
字符串值
在注册表中,字符串值一般用来表示文件的描述、硬件的标识等。通常它由字母和数字组成,最大长度不能超过255个字符。通过键值名、键值就可以组成一种键值项数据,这就相当于Win.ini、Ssyt-em.ini文件中小节下的设置行。其实,使用注册表编辑器将这些键值项数据导出后,其形式与INI文件中的设置行完全相同。
二进制值
在注册表中,二进制值是没有长度限制的,可以是任意个字节长。在注册表编辑器中,二进制以十六进制的方式显示出来。
DWORD值
DWORD值是一个32位(4个字节,即双字)长度的数值。在注册表编辑器中,您将发现系统会以十六进制的方式显示DWORD值,在编辑DWORD数值时,可以选择用十进制还是16进制的方式进行输入。
作者: Batcher 时间: 2011-9-9 18:49
是否可以增加一下几个方面?
1、给个具体例子说明/ve怎么用
2、百分号、双引号怎么转义
3、删除、导入、导出等怎么用
参考:http://bbs.bathome.net/thread-3747-1-1.html
作者: CrLf 时间: 2011-10-5 21:06
reg命令可直接操作注册表,注册表是windows的数据库,所以关键不是reg而是注册表!但reg既然可以操作注册表,那么即便关键不是reg,那也是reg。
好晕啊...
作者: zaixinxiangnian 时间: 2011-10-6 15:05
本帖最后由 zaixinxiangnian 于 2011-10-6 15:06 编辑
回复 1# Hello123World
export 的输出的文件和REG文件有区别吗?
好像RGE这个命令可以编辑注册表文件了
作者: Hello123World 时间: 2011-10-6 15:29
回复 4# zaixinxiangnian
这种问题,随手自己就可以测试了……
没有差别,这是用export导出的reg文件。- Windows Registry Editor Version 5.00
-
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
- "QvodTerminal"="\"F:\\视频软件\\QvodPlayer\\QvodTerminal.exe\" -autorun"
- "qq"="F:\\腾讯软件\\qq\\qq.exe"
-
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\QQDisabled]
复制代码
这是注册表手动导出的reg。- Windows Registry Editor Version 5.00
-
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
- "QvodTerminal"="\"F:\\视频软件\\QvodPlayer\\QvodTerminal.exe\" -autorun"
- "qq"="F:\\腾讯软件\\qq\\qq.exe"
-
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\QQDisabled]
复制代码
作者: Hello123World 时间: 2011-10-6 15:31
恩,导出后的reg文件,可以不用import导入,可以直接双击导入。
作者: zaixinxiangnian 时间: 2011-10-6 16:31
回复 5# Hello123World
偷个小懒了,所以没有试
以后可以用批的EXPORT做注册表优化的注册表文件了
问个不相关的问题 PB做什么用,是不是就是积分啊。查看新帖列表哪里,标题前面的图标是什么意思?
作者: Hello123World 时间: 2011-10-6 18:39
回复 7# zaixinxiangnian
http://bbs.bathome.net/faq.php?action=credits
作者: zaixinxiangnian 时间: 2011-10-7 16:47
回复 8# Hello123World
我问的是这个火把等在这个位置的标志是什么意思
作者: cjiabing 时间: 2011-10-7 21:04
回复 9# zaixinxiangnian
多看看论坛介绍帖,多上论坛发言,逐渐就懂了。
作者: cb02356828 时间: 2012-4-12 19:30
Hello123World 发表于 2011-9-9 17:26
/ve,全英文value(不肯定),意为:值;这里引申为值名。
这个是不是应该是 value empty 啊,因为它设的是空
作者: changedirectory 时间: 2013-9-21 17:47
- ::获取ie缓存文件夹位置
- set zcb=
- set hc=
- set weizhi=
- set "zcb=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- for /f "tokens=1* delims=Z" %%i in ('reg query "%zcb%" /v cache') do set "weizhi=%%j"
- set "hc=%weizhi:~1%"
- for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"
- echo ie缓存文件夹位置:%hc%
复制代码
能解释第8行有什么作用吗?谢谢!
for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"
作者: cjiabing 时间: 2013-9-30 17:31
回复 12# changedirectory
其实,命令可以简化为一行:
- @echo off &::获取ie缓存文件夹位置
- for /f "eol=! tokens=3*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v cache') do echo %%i %%j
- pause>nul
复制代码
如果你想更直接点,可以使用:
- echo %USERPROFILE%\Local Settings\Temporary Internet Files
复制代码
它们的结果是一样的。另外:
%TEMP%
指向的是当前用户的临时文件目录,通常是C:\Documents and Settings\当前用户名\Local Settings\Temp。
%TMP%
与%TEMP%的指向相同。
作者: Tufeiheike 时间: 2014-9-10 21:45
感觉一遇到%就蛋疼,好搞不懂什么时候单%什么时候双%
作者: shelluserwlb 时间: 2014-11-3 14:34
本帖最后由 shelluserwlb 于 2014-11-3 14:37 编辑
回复 12# changedirectory
for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"
上面这句话是清除前导空格以提取字符,例如原先hc=" abc ",执行后hc="abc"
例:
@echo off
set hc= abc
echo 原先:%hc%
for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"
echo 提取:%hc%
pause
作者: 无忧 时间: 2017-5-17 11:41
版主,注册表的编辑支持简写么?比如HEKY_CLASSES_ROOT写成HKCR,以此类推 HKCU HKLM HCU HKCC。
还有就是注册表路径区分大小写么? 比如路径里写成HKLM\SOFTWARE\MICROSOFT\WINDOWS\…
作者: ShowCode 时间: 2017-5-17 11:51
回复 16# 无忧
你自己做个试验就知道啦
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |