中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-18 20:06
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]注册表快速定位 查看 3,917 回复 18
楼 主 [原创]注册表快速定位 发表于 2007-02-01 06:55 ·  中国 浙江 杭州 电信
初级用户
积分 116
发帖 28
注册 2007-01-03 05:21
UID 75318
性别 男
状态 离线
用过 sysinternals 的 regjump
就用BAT来写了一把,
但缺点是不能定位到具体的值。

新手作品,请大家多多指正! 谢谢!


@Echo OFF
::
:: BatName: OpenReg.bat
:: Version: 0.1
:: Purpose: 注册表快速定位
::
:: Usage: OpenReg
:: example: OpenReg HKLM\Software\Microsoft\Windows
::
:: Code by SpikeKnox 2007.01.31
::

rem Show help
If == (Type "%~f0" | findstr "^::" && Goto :EOF)

:OpenReg
SetLocal EnableDelayedExpansion
rem %1 要定位的路径(可选,为空时将regedit定位到根目录)
If NOT == (

Set tag=我的电脑\%1
Set "tag=!tag:"=!"

rem 缩写路径转换
Set "tag=!tag:HKCR\=HKEY_CLASSES_ROOT\!"
Set "tag=!tag:HKCU\=HKEY_CURRENT_USER\!"
Set "tag=!tag:HKLM\=HKEY_LOCAL_MACHINE\!"
Set "tag=!tag:HKU\=HKEY_USERS\!"
Set "tag=!tag:HKCC\=HKEY_CURRENT_CONFIG\!"

Set tag="!tag!"

) Else (

Set "tag=我的电脑"

)

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit /v LastKey /d %tag% /f >NUL
Start regedit

SetLocal DisableDelayedExpansion
Goto :EOF


[ Last edited by SpikeKnox on 2007-1-31 at 05:57 PM ]
本帖最近评分记录 (共 3 条) 点击查看详情
评分人分数时间
0401 +2 2007-02-01 18:16
electronixtar +11 2007-03-18 03:36
everest79 +8 2007-03-24 15:27
2 [原创]自己继一个,查找winrar的安装目录 发表于 2007-02-01 12:13 ·  中国 浙江 杭州 华数
初级用户
积分 116
发帖 28
注册 2007-01-03 05:21
UID 75318
性别 男
状态 离线
QuerySoftRegKey winrar "C%%Program Files%WinRAR"


@Echo OFF
::
:: BatName: QuerySoftRegKey.bat
:: Version: 0.1
:: Purpose: 查询软件在注册表各Software项中的位置
::
:: Usage: QuerySoftRegKey softName
::
:: softName 要查询的软件名
:: key 要查询的值名(可选)
::
:: example: QuerySoftRegKey winrar
:: QuerySoftRegKey winrar "C%%Program Files%WinRAR"
::
::
:: Code by SpikeKnox 2007.01.31
::

rem Show help
If == Call :Help && Goto :EOF

SetLocal ENABLEDELAYEDEXPANSION

If == Call :Help && Goto :EOF
Set softName=%1
Set "softName=!softName:"=%!
Set softName="!softName!"

If NOT == (
Set "key=%2"
Set "key=!key:"=%!
Set key="!key!"
)

For /f "delims=☆" %%i IN ('^(reg query HKCU\Software /k /f %softName% ^&^& reg query HKLM\Software /k /f %softName%^) ^| find "HKEY_"') DO (
If == (
rem 只查询软件名
Echo %%i
Call :OpenReg "%%i"
) Else (
rem 只查询软件名和具体的值名
Set item="%%i"
for /f "delims=☆" %%I IN ('reg query !item! /s /f !key! ^| find "HKEY_"') DO Call :OpenReg "%%I"
reg query !item! /s /f !key! | find !key!
)
)

Goto :EOF

:OpenReg
rem %1 要定位的路径(可选,为空时将regedit定位到根目录)
If NOT == (

Set tag=我的电脑\%1
Set "tag=!tag:"=!"

rem 缩写路径转换
Set "tag=!tag:HKCR\=HKEY_CLASSES_ROOT\!"
Set "tag=!tag:HKCU\=HKEY_CURRENT_USER\!"
Set "tag=!tag:HKLM\=HKEY_LOCAL_MACHINE\!"
Set "tag=!tag:HKU\=HKEY_USERS\!"
Set "tag=!tag:HKCC\=HKEY_CURRENT_CONFIG\!"

Set tag="!tag!"

) Else (

Set "tag=我的电脑"

)

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit /v LastKey /d %tag% /f >NUL
Start regedit

Goto :EOF

:Help
Type "%~f0" | findstr "^::"
Goto :EOF
本帖最近评分记录 (共 3 条) 点击查看详情
评分人分数时间
redtek +10 2007-02-01 21:15
HUNRYBECKY +2 2007-02-01 22:55
electronixtar +8 2007-03-18 03:37
3 发表于 2007-02-01 18:18 ·  中国 北京 朝阳区 联通
中级用户
★★
带走
积分 435
发帖 88
注册 2005-09-24 19:22
UID 42793
状态 离线
写得很漂亮啊,为 LastKey 加2分。
4 发表于 2007-02-01 22:55 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,179
发帖 442
注册 2006-09-09 22:47
UID 62249
状态 离线
我也支持,加2分。不错。
5 发表于 2007-02-01 23:00 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,179
发帖 442
注册 2006-09-09 22:47
UID 62249
状态 离线
不过用起来有点问题,显示错误:命令行参数太多,希望修正。
6 可能是我们的 reg.exe 的版本不同 发表于 2007-02-02 01:25 ·  中国 浙江 杭州 电信
初级用户
积分 116
发帖 28
注册 2007-01-03 05:21
UID 75318
性别 男
状态 离线
Originally posted by HUNRYBECKY at 2007-2-1 10:00 AM:
不过用起来有点问题,显示错误:命令行参数太多,希望修正。


我用的是Win2003。

reg query 支持这些参数,老版本的没有那么多的。

REG QUERY KeyName | /ve]
]

KeyName FullKey
Machine - 远程机器名称,省略当前机器的默认值。在远程机器上
只有 HKLM 和 HKU 可用。
FullKey - 以 ROOTKEY\SubKey 名称形式
ROOTKEY -
SubKey - 在选择的 ROOTKEY 下的注册表项的全名

/v 具体的注册表项值的查询。
如果省略,会查询该项的所有值。

只有与 /f 开关一起指定的情况下,此开关的参数才是可选的。它指定
只在值名称中搜索。

/ve 查询默认值或空值名称(默认)。

/s 循环查询所有子项和值(如 dir /s)。

/se 为 REG_MULTI_SZ 在数据字符串中指定分隔符(长度只为 1 个字符)。
默认分隔符为 "\0"。

/f 指定搜索的数据或模式。
如果字符串包含空格,请使用双引号。默认为 "*"。

/k 指定只在项名称中搜索。

/d 指定只在数据中搜索。

/c 指定搜索时区分大小写。
默认搜索为不区分大小写。

/e 指定只返回完全匹配。
默认是返回所有匹配。

/t 指定注册表值数据类型。
有效的值是:
REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ,
REG_DWORD, REG_BINARY, REG_NONE
默认为所有类型。

/z 详细: 显示值名称类型的数字等值。
7 发表于 2007-03-18 02:45 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,179
发帖 442
注册 2006-09-09 22:47
UID 62249
状态 离线
Originally posted by SpikeKnox at 2007-2-2 01:25:


我用的是Win2003。

reg query 支持这些参数,老版本的没有那么多的。:(

REG QUERY KeyName | /ve]
] ...


的确不一样,我的是XPSP2的,好多参数都没有.
8 发表于 2007-03-18 03:29 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
LASTKEY老早就用了,有优点……但是只能是打开regedit的第一次。

N久以前写的:


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'功能:快捷到达注册表指定路径。 '
'作者:轩轩G.G. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim OperationRegistry
Set OperationRegistry=WScript.Createobject("WScript.Shell")
RegPath="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Favorites"
Favorites_GoName="&S我要到→"
Type_Name="REG_SZ"

Key_Data=Inputbox("本脚本由" & vbcrlf & "ID:SLore" & vbcrlf & "昵称:轩 制作" & vbcrlf & "转发或转帖请注明

本信息!" & vbcrlf & vbcrlf & "请输入你要去的路径:","路径",RegPath)

If Key_Data=False Then WScript.Quit

OperationRegistry.RegWrite RegPath & "\" & Favorites_GoName,"我的电脑\" & Key_Data,Type_Name
OperationRegistry.Run("Regedit")
WScript.Sleep 1000 '延时1s (如果计算机速度较慢请将此值设置大些)
OperationRegistry.SendKeys "%a+s"
WScript.Quit
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
baomaboy +4 2007-03-24 14:50
9 发表于 2007-03-18 03:34 ·  中国 浙江 温州 电信
初级用户
积分 42
发帖 17
注册 2005-08-28 14:49
UID 42027
状态 离线
学习了
呵呵^^
10 发表于 2007-03-18 03:35 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
厉害,顶!

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
11 发表于 2007-03-18 04:23 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,179
发帖 442
注册 2006-09-09 22:47
UID 62249
状态 离线
发现WIN2003的REG命令很好用,修正了前段时间所说的REG QUERY命令会莫名其妙的"吃掉"中文字符的尾部的问题.
2003的这个命令,经过我测试,发现已经完全解决了这个问题,而且可以移值到WINXP中使用.现在查询不再有问题了,帖出两个版本的比较结果:
源值TMP="D:\USERDATA\TEMP t\我爱大苏打佛似的发十分\什么东西我都不爱得到 打开发地方\哈了"
WINXPSP2查询结果:


! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\Environment
TMP REG_SZ D:\USERDATA\TEMP t\我爱大苏打佛似的发十分\什么东西


WIN2003 查结果:


HKEY_CURRENT_USER\Environment
TMP REG_SZ D:\USERDATA\TEMP t\我爱大苏打佛似的发十分\什么东西我都不爱得到 打开发地方\哈了


不知道大家发现没有:2003的查询结果少了两行数据了,而且不在出现 REG.EXE VERSION 3.0,我看REG的版本,已经是5的了.
原贴讨论:
http://www.cn-dos.net/forum/viewthread.php?tid=22202&pid=182591&page=1&sid=Bi8yqD#pid182591
http://www.cn-dos.net/forum/viewthread.php?tid=22800&fpage=1&highlight=REG%2BQUERY
http://www.cn-dos.net/forum/viewthread.php?tid=21365&fpage=1&highlight=%E6%B3%A8%E5%86%8C%E8%A1%A8%2B%E4%B8%AD%E6%96%87

[ Last edited by HUNRYBECKY on 2007-3-18 at 04:29 AM ]
12 发表于 2007-03-24 13:04 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
精华帖啊,版主来加精!!!!

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
13 发表于 2007-03-24 19:59 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

不错,顶一个了。

HUNRYBECKY 兄可否将2003的reg命令上传一个到论坛上面来,很多人都是xp的。
14 发表于 2007-03-25 01:43 ·  中国 安徽 芜湖 电信
高级用户
★★★
积分 906
发帖 346
注册 2006-07-10 09:58
UID 58334
性别 男
状态 离线
比如我要查这个。怎么写呢?HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab
15 发表于 2007-03-25 01:57 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
UID 79596
性别 男
来自 安徽
状态 离线
Set "tag=!tag:"=!"

怎么是3个"????
好象等价于
set "tag=!tag!"
?!


F:\>QuerySoftRegKey winrar

错误: 命令行参数太多

[ Last edited by xycoordinate on 2007-3-24 at 01:00 PM ]
论坛跳转: