无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 16421|回复: 57
打印 上一主题 下一主题

[已解决] 注册表里怎么使用相对路径?比如:%HOMEDRIVE%这种

  [复制链接]
跳转到指定楼层
1#
发表于 2016-6-26 09:17:56 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 netmjwork 于 2016-6-28 09:25 编辑

在网上找了一个添加7z右键的注册表文件,里面路径是绝对路径可以使用,但是替换成 相对路径 就无法使用了,提示“拒绝访问”……
请教在注册表里 %HOMEDRIVE% 这种相对路径如何使用?谢谢!

如下的 c: 换成 %%HOMEDRIVE%% 就无法运行(也尝试 %HOMEDRIVE%都不行),提示“拒绝访问”,但如果是 c: 的话可以正常运行。
[HKEY_CLASSES_ROOT\7-Zip.zip\shell\open\command]
@="\" c: \\7zip\\7zFM.exe\" \"%1\""

[HKEY_CLASSES_ROOT\7-Zip.zip\shell\open\command]
@="\"%%HOMEDRIVE%%\\7zip\\7zFM.exe\" \"%1\""
2#
 楼主| 发表于 2016-6-26 11:15:54 | 显示全部楼层
pogua007 发表于 2016-6-26 09:52
诶,你怎么问这样的问题。这个问题确实比较古怪,解决方法更是古怪的非常没有道理,使用也非常不方便。
如 ...

您这个方法我用不来,高手可以用~

是这样的,我想实现:
1、7zip的目录是任意
2、用批处理或VBS实现:运行后自动关联.7z格式的文件,增加“目录式”的右键菜单,“根菜单”是“77zz”(以便区别),
     子菜单一:对文件形式,命名为“极限压缩为7z”
     子菜单二:对文件形式,且仅仅后缀名是“.7z”的文件时,增加命名为“用7z打开”
     子菜单一:对文件夹、目录形式,命名为“极限压缩为7z”

网上看的代码不能实现“目录式”的菜单,倒是实现了文件和文件夹的右键菜单,还在研究……

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.7z]
@="77zz"

[HKEY_CLASSES_ROOT\77zz]
@="7z Archive"

[HKEY_CLASSES_ROOT\77zz\DefaultIcon]
@="c:\\7zip\\7z.ico"



[HKEY_CLASSES_ROOT\77zz\shell]
@=""
[HKEY_CLASSES_ROOT\77zz\shell\open]
@=""
[HKEY_CLASSES_ROOT\77zz\shell\open\command]
@="\"c:\\7zip\\7zFM.exe\" \"%1\""



[HKEY_CLASSES_ROOT\.7z\shell\Zip]
@="极限压缩为 .7z"
[HKEY_CLASSES_ROOT\.7z\shell\Zip\command]
@="\"c:\\7zip\\7zg.exe\" a -t7z -mx9 \"%1\".7z \"%1\""



[HKEY_CLASSES_ROOT\Folder\shell\7z]
@="极限压缩为 .7z"
[HKEY_CLASSES_ROOT\Folder\shell\7z\command]
@="\"c:\\7zip\\7zg.exe\" a -r -t7z -mx9 \"%1\".7z \"%1\""
回复

使用道具 举报

3#
 楼主| 发表于 2016-6-26 11:18:57 | 显示全部楼层
807979023 发表于 2016-6-26 10:34
我是先将reg文件先转换为批处理,再修改c:为变量%SystemDrive%,最后运行批处理修改注册表。

原reg:

多谢分享!

是个好方法,我试下~
回复

使用道具 举报

4#
 楼主| 发表于 2016-6-26 11:25:36 | 显示全部楼层
本帖最后由 netmjwork 于 2016-6-26 11:27 编辑
807979023 发表于 2016-6-26 10:34
我是先将reg文件先转换为批处理,再修改c:为变量%SystemDrive%,最后运行批处理修改注册表。

原reg:


您好,好像我要实现的就是您操作实现过的~

能帮忙看下实现 6楼 我希望的效果,全部需要几行吗?多谢!

那个我也不知道是不是每项都需要,而且无法实现“目录式”的菜单效果,我只需要我希望的简单效果就行,运行过完整的之后就没法验证了……

点评

你到底问的是在注册表的command中使用环境变量,还是问右键菜单增加子菜单。 如果command使用环境变量,必须默认值的类型为REG_EXPAND_SZ。 增加子菜单很难,一般都是加载DLL实现的。  详情 回复 发表于 2016-6-26 12:11
回复

使用道具 举报

5#
 楼主| 发表于 2016-6-26 12:31:02 | 显示全部楼层
pogua007 发表于 2016-6-26 12:11
你到底问的是在注册表的command中使用环境变量,还是问右键菜单增加子菜单。
如果command使用环境变量, ...

想实现6楼说的效果,包括子菜单
如果子菜单还需要dll实现那就算了,可能太麻烦
回复

使用道具 举报

6#
 楼主| 发表于 2016-6-26 12:33:00 | 显示全部楼层
窄口牛 发表于 2016-6-26 12:20
建议你把rar的右键导出来,修改了打回去试试。

关键是不知道导哪些项……
回复

使用道具 举报

7#
 楼主| 发表于 2016-6-26 15:05:12 | 显示全部楼层
807979023 发表于 2016-6-26 12:59
pogua007说得对,数据类型是字符串的确不能用环境变量,虽然能导入,实际使用时出錯。
下面是使用成功的右 ...

多谢帮助!
我再修改修改来使用
回复

使用道具 举报

8#
 楼主| 发表于 2016-6-26 15:07:50 | 显示全部楼层
pogua007 发表于 2016-6-26 13:17
我日,终于找到怎么右键菜单加子菜单了,千辛万苦找到一个例子,还没有消化,等我研究研究,不过发现我应该 ...

期待您研究后分享下 ,多谢!
回复

使用道具 举报

9#
 楼主| 发表于 2016-6-26 16:05:43 | 显示全部楼层
807979023 发表于 2016-6-26 12:59
pogua007说得对,数据类型是字符串的确不能用环境变量,虽然能导入,实际使用时出錯。
下面是使用成功的右 ...

另外请教下:
HKCR\*\shell\
HKLM\SOFTWARE\Classes\*\shell

这两个地方都需要操作吗?有什么区别?
好像只用上面的也行……
回复

使用道具 举报

10#
 楼主| 发表于 2016-6-26 17:42:03 | 显示全部楼层
nttwqz 发表于 2016-6-26 17:23
如果想注册表中的值内容是%SYSTEMDRIVE%,改成%%SYSTEMDRIVE%%即可。参考23行。

非常感谢!我再试试~

网上查到另一种解决相对路径的写法:
reg add "HKEY_CLASSES_ROOT\*\shell\notepad++\command" /ve   /d "\"%cd%\notepad++.exe\" %%0 " /f

点评

%~dp0 批处理需要在7Z目录下'或者在开头加个pushd %~dp0,你这注册表就不用好了。  详情 回复 发表于 2016-6-26 18:48
回复

使用道具 举报

11#
 楼主| 发表于 2016-6-26 18:59:34 | 显示全部楼层
本帖最后由 netmjwork 于 2016-6-26 20:30 编辑


您好,那命令是网上抄的,我测试过没有问题

REG ADD HKCR\7-Zip.7z /D "7z Archive" /F   这句起什么作用?

REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\77zzmax\command
问题就出在这行,这行是什么作用呢?为什么不是以前单独对文件和文件夹分别来设置?
我是XP系统,始终没有出现子菜单,替换内容后也无法使用……
右键只有孤零零一个77ZZ/7zz在那里,点击提示“该文件没有程序与之关联来执行该操作。请在控制面板的文件夹选项中创建关联”

和命令没有关系,因为我换如下的都还是报错“命令行参数无效”
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\77zzmax\open\command /D "C:\soft\7zip\7zFM.exe"  /F

就两行命令报错,可能也就因为这个原因,子菜单根本不能出现,功能也无法用
按说对一般不是.7z文件来说是没有“用7z打开”的菜单,现在一般文件右键只有一个“77zz”没法用,应该调整好还是目录的形式


补充一点:我测试命令成功是在注册表里面操作成功,不是批处理,比如下面这段
[HKEY_CLASSES_ROOT\*\shell\Zip\command]
@="\"c:\\7zip\\7zg.exe\" a -t7z -mx9 \"%1\".7z \"%1\""

点评

虚拟机中的XP已经删了,只能用03PE测试了,的确无法显示,原因未知。 参数错误已经修正,XP的reg命令没有/VE 参数会报错。 7z文件图标显示异常的问题已经修正 现在一般文件不会显示用7z打开了  详情 回复 发表于 2016-6-26 23:18
回复

使用道具 举报

12#
 楼主| 发表于 2016-6-26 19:21:03 | 显示全部楼层
nttwqz 发表于 2016-6-26 18:48
%~dp0

批处理需要在7Z目录下'或者在开头加个pushd %~dp0,你这注册表就不用好了。

注册表看来还是没批处理好用……  

他那个批处理开头没有加pushd %~dp0,测试正常使用
他提示是:%0表示传递的是文件名称,%V表示传递的是文件夹的名称
回复

使用道具 举报

13#
 楼主| 发表于 2016-6-27 08:24:17 | 显示全部楼层
nttwqz 发表于 2016-6-26 23:40
哈哈哈哈,不知道楼主什么感觉,折腾了半天,竟然不支持。

多谢科普,我也不知道。 ...

非常感谢您!
很晚了还专门用03测试一遍……

您说的应该是安装包用/S参数,这个还真不知道,我是安装后再设置,要么复制解压后的文件夹,以后换环境用觉得麻烦,才想起来操作“一键式”的效果

新手可能会经常因为不了解犯这种“复杂化”的错误,最开始找到的答案是注册表,就从注册表开始解决了……
确认您那第一版子菜单无效后就用最简单的一个右键,后来用的注册表抓取(是程序自动生成自定义)解决的,但不知道系统通用性怎么样,可能win7还会有些问题,以后再调整,收藏您的方法~
回复

使用道具 举报

14#
 楼主| 发表于 2016-6-27 08:33:18 | 显示全部楼层
pogua007 发表于 2016-6-27 00:02
我很看好楼主哈,很有想法,搞技术不怕知识缺乏,不怕菜,敢想敢干才是重要的,知识是可以增长的,有想法 ...

谢谢鼓励!

现在是为了一些想法啃代码(没有基础只能啃了~),没有基础也只能实现一些简单的效果,现在是想解决一部分实用性的问题。

其实也正常的,不会又想实现的效果就要虚心的向别人请教,别人帮助解答了一定要认真感谢别人的,如果因为忙或别的原因不能解答那就自己找别的方法解决,实在不行就只能放着以后有时间解决了……

点评

你上次问那个7z不能解压至win10带空格的路径的问题里面,我给你举的例子里面就有7z静默安装的示例。不过静默安装之后的默认设置很不怎么样,除了7z之外,zip和rar文件都没有关联。菜单也没有设置,如果不想手工设置  详情 回复 发表于 2016-6-27 08:45
回复

使用道具 举报

15#
 楼主| 发表于 2016-6-27 08:45:24 | 显示全部楼层
singel 发表于 2016-6-26 23:27
XP系统不支持注册表写目录式子菜单,NT6以上才支持

谢谢~  
早知道xp就不去想着弄子菜单了……
一个右键菜单还省事儿~
回复

使用道具 举报

16#
 楼主| 发表于 2016-6-27 08:48:29 | 显示全部楼层
nttwqz 发表于 2016-6-26 23:18
虚拟机中的XP已经删了,只能用03PE测试了,的确无法显示,原因未知。
参数错误已经修正,XP的reg命令没 ...

这个还是有点儿小问题,带空格路径居然不识别?
确定是路径的问题,代码里没有and这个词……



回复

使用道具 举报

17#
 楼主| 发表于 2016-6-27 09:12:42 | 显示全部楼层
pogua007 发表于 2016-6-27 08:45
你上次问那个7z不能解压至win10带空格的路径的问题里面,我给你举的例子里面就有7z静默安装的示例。不过 ...

不怕您笑话,上次那段儿代码没看太明白,方便的话帮忙注释下每行,以后会用到,多谢!
有几个问题不确定:
1、解压路径设置在哪里了?  %ProgramW6432% 这个是设置的解压路径吗?代表着什么路径
2、安装7zip好像没见使用“/S”这种参数?
3、比方说我指定解压到“%homedrive%\Progra~1”里,下一步运行里面子目录里的“office\go.vbs”应该怎么写?
start "" "%homedrive%\Progra~1\office\go.vbs"这句增加到后面就是一个完整的解压运行的流程,对吗?


Start /Wait Msiexec /q /I %SystemRoot%\Setup\Scripts\7z1514-x64.msi
set tmp0=%ProgramW6432%
for %%x in ("%tmp0%") do set tmp0=%%~sx
set tmp1=%tmp0%\7-Zip\7z
%tmp1% x %SystemRoot%\Setup\Scripts\压缩包.7z -o%tmp0%

点评

我用的是msi格式的安装包,这种安装包是使用Windows Installer服务进行安装的,天生支持静默安装。 静默安装方法为:Msiexec /q /I 程序包名称, 也可以是:程序包 /q或者/qn。 如果是可能会重启的安装程序,可以  详情 回复 发表于 2016-6-27 09:31
回复

使用道具 举报

18#
 楼主| 发表于 2016-6-27 09:42:23 | 显示全部楼层
pogua007 发表于 2016-6-27 09:13
批处理的解释器再加上reg命令的解释器把特殊字符的处理搞的非常麻烦。像双引号就是特殊字符,nttwqz给的批 ...

多谢!照葫芦画瓢出问题了…… 下面这种怎么改?(还有^符号……,不知道怎么来套格式了)
空闲时帮忙看下,不耽误工作,多谢!

REG ADD HKCR\7-Zip.7z\DefaultIcon /VE /T REG_SZ /D ""%%cd%%\7z.dll,0"" /F
REG ADD HKCR\7-Zip.7z\shell\open\command /VE /T REG_EXPAND_SZ /D ""\"%%cd%%\7zFM.exe"\" \"^"%%1^"\"" /F
WARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\77zzmax\command /VE /D ""\"%%cd%%\7zg.exe"\" a -r -t7z -mx9 \"^"%%1^"\" .7z \"^"%%1^"\"" /F
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\OpenWith77zz\command /VE /D "\"%cd%\7zFM.exe\" \"^"%%1^"\"" /F

点评

这个命令中^和\作用是一样的,都是转义符,意思是下一个字符是原本的字符,不是特殊标志符号。不过使用\会容易混淆,使程序更不易读,所以尽量用^,你把两个都用上肯定会出错的。 不能用%CD%,%CD%是临时变量,获得  详情 回复 发表于 2016-6-27 10:04
回复

使用道具 举报

19#
 楼主| 发表于 2016-6-27 19:18:53 | 显示全部楼层
pogua007 发表于 2016-6-27 09:31
我用的是msi格式的安装包,这种安装包是使用Windows Installer服务进行安装的,天生支持静默安装。
静 ...

是的,我就是直接用短地址来作为相对路径的“绝对地址”,不至于跑到x86去,多谢!

vbs一般用run命令多,一般情况下可以无视空格路径
回复

使用道具 举报

20#
 楼主| 发表于 2016-6-27 19:59:06 | 显示全部楼层
本帖最后由 netmjwork 于 2016-6-27 20:12 编辑
nttwqz 发表于 2016-6-27 18:37
一直以来,我都认为注册表reg中只能使用\转义,经过测试发现,可以用"代替,输入更方便(一个键上面)

...


reg add HKLM\SOFTWARE\7-Zip\ /ve /t REG_EXPAND_SZ /d  "\"%HOMEDRIVE%\7zip\7zfm.exe\" %%0" /f
"C:\7zip\7zfm.exe" %0

echo y| reg add HKLM\SOFTWARE\7-Zip\ /ve /t REG_EXPAND_SZ /d """%"systemdrive"%"\7zip\7zFM.exe""" """%1"""
"%systemdrive%\7zip\7zFM.exe" "%1"

输出值不同,上面一个直接识别出是C盘路径

有点儿混淆了,现在问题是批处理本身在含空格的目录里无法运行(比如桌面),在不含空格的目录里识别空格路径是没问题的……(单条加入注册表没有问题)

点评

谢谢哈,echo y加在前面是不是后面的/f无法识别了,不过至少不用\了。 这个转义太见鬼了,我试试大杀器,把这命令拆成两句用变量看看。  详情 回复 发表于 2016-6-27 20:26
你后面加了,前面为何不加?%%HOMEDRIVE%%  详情 回复 发表于 2016-6-27 20:07
回复

使用道具 举报

21#
 楼主| 发表于 2016-6-27 20:29:06 | 显示全部楼层
本帖最后由 netmjwork 于 2016-6-27 20:31 编辑
nttwqz 发表于 2016-6-27 20:07
你后面加了,前面为何不加?%%HOMEDRIVE%%


没明白什么意思……?

好像是批处理前面没识别当前路径,单条执行的话看注册表输出的值是正确的:
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\77zzmax\command /VE /D "\"%cd%\7zg.exe\" a -r -t7z -mx9 \"%%1\" .7z \"%%1\"" /F

值为 "C:\Documents and Settings\Administrator\桌面\7zg.exe" a -r -t7z -mx9 "%1".7z "%1"

点评

用一个%把变量名括起来,就被cmd解释为变量的值,用两个%%括起来,就被解释为字符串:%变量名%。  详情 回复 发表于 2016-6-27 21:00
回复

使用道具 举报

22#
 楼主| 发表于 2016-6-27 22:19:44 | 显示全部楼层
pogua007 发表于 2016-6-27 21:00
用一个%把变量名括起来,就被cmd解释为变量的值,用两个%%括起来,就被解释为字符串:%变量名%。
你确 ...

只是觉得%cd%更方便些,特别对于绿色软件
回复

使用道具 举报

23#
 楼主| 发表于 2016-6-27 22:20:48 | 显示全部楼层

非常感谢!
终于搞定了~

点评

XP能显示子菜单了???  详情 回复 发表于 2016-6-27 23:04
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-6-8 09:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表