无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 22019|回复: 57
打印 上一主题 下一主题

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

  [复制链接]
1#
发表于 2016-6-26 09:52:02 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-26 09:56 编辑

诶,你怎么问这样的问题。这个问题确实比较古怪,解决方法更是古怪的非常没有道理,使用也非常不方便。
如果要使用变量作为command的路径,需要@值的数据类型是可扩充的字符串(REG_EXPAND_SZ),还有你的语法也不对,一般的系统变量调用都是一个%,除了批处理文件中,因为cmd解释器的原因,要两个%。
知道这些解决也是很麻烦的,
一、注册表编辑器、vbs、reg命令都是没有办法修改数据类型的;
二、默认值是没有办法删除的;
三、可扩充的字符串(REG_EXPAND_SZ)转换是也是一个问题,REG_EXPAND_SZ值在reg文件中是很长的二进制数据,因为用的少也没有找转换的办法,目前的办法只有在注册表编辑器中设置好数值,然后导出为reg文件。
如你例子中的解决办法就是,在你要改的项下,新建一个可扩充的字符串(REG_EXPAND_SZ)值,然后设置数据为,你需要的数据,比如你7z的路径上面,就应该写为%SystemDrive%\7-Zip\7zFM.exe "%1",然后导出注册表文件,再修改注册表文件,先加一行删除项的。然后删除默认值,把你后来加的可扩充的字符串值,改名为@。然后导入注册表文件。具体注册表内容如下:
  1. Windows Registry Editor Version 5.00

  2. [-HKEY_CLASSES_ROOT\7-Zip.rar\shell\open\command]

  3. [HKEY_CLASSES_ROOT\7-Zip.rar\shell\open\command]
  4. @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,44,00,72,00,69,00,76,00,65,\
  5.   00,25,00,5c,00,37,00,2d,00,5a,00,69,00,70,00,5c,00,37,00,7a,00,46,00,4d,00,\
  6.   2e,00,65,00,78,00,65,00,20,00,22,00,25,00,31,00,22,00,00,00
复制代码

目前就这一个办法,我目测一下这个可扩充字符串好象就是16进制文本吗,不过就是知道了也很麻烦。
晕,我写的路径是%SystemDrive%\7-Zip\7zFM.exe,你的是%SystemDrive%\7Zip\7zFM.exe,你要拿去直接测试也会出错,导入之后自己修改吧,你看这也是一个麻烦,不能直接修改值。
回复

使用道具 举报

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

原reg:


你没有指定数据类型?默认还是字符串,不是可扩充的字符串,字符串不能用环境变量的
我试了一下,下面的写法可以
  1. reg add "HKCR\7-Zip.zip\shell\open\command" /ve /t REG_EXPAND_SZ /d "%%systemroot%%\7zip\7zFM.exe "^"%%1^""" /f
复制代码

尼玛,cmd的特殊字符处理真恶心
回复

使用道具 举报

3#
发表于 2016-6-26 12:11:09 | 显示全部楼层
netmjwork 发表于 2016-6-26 11:25
您好,好像我要实现的就是您操作实现过的~

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

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

使用道具 举报

4#
发表于 2016-6-26 13:17:54 | 显示全部楼层
我日,终于找到怎么右键菜单加子菜单了,千辛万苦找到一个例子,还没有消化,等我研究研究,不过发现我应该睡觉了。这么原创的办法,应该发帖。我可能不回贴了。
我马上就不用explorer做shell了,我这是何苦呢。
回复

使用道具 举报

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

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

我很看好楼主哈,很有想法,搞技术不怕知识缺乏,不怕菜,敢想敢干才是重要的,知识是可以增长的,有想法才有发展前途。
楼主也不是什么伸手党,他会从多种途径努力寻找解决办法,虽然因为水平的限制,暂时无法鉴别和组合找到的东西,但是确实是很努力的自己解决问题。这很好,希望继续坚持这种独立自主、自力更生的好习惯。
楼主请求人帮忙的时候也很虚心,很有礼貌,很注意方法,总是努力的想表述清楚自己的想要什么。
总之这是个不错的小伙子,他给了我一种十几年前逛论坛的那种感觉,有能力的请多多帮助他,期待他的成长。
回复

使用道具 举报

6#
发表于 2016-6-27 08:45:40 | 显示全部楼层
netmjwork 发表于 2016-6-27 08:33
谢谢鼓励!

现在是为了一些想法啃代码(没有基础只能啃了~),没有基础也只能实现一些简单的效果, ...

你上次问那个7z不能解压至win10带空格的路径的问题里面,我给你举的例子里面就有7z静默安装的示例。不过静默安装之后的默认设置很不怎么样,除了7z之外,zip和rar文件都没有关联。菜单也没有设置,如果不想手工设置,还要导入注册表。

点评

不怕您笑话,上次那段儿代码没看太明白,方便的话帮忙注释下每行,以后会用到,多谢! 有几个问题不确定: 1、解压路径设置在哪里了? %ProgramW6432% 这个是设置的解压路径吗?代表着什么路径 2、安装7zip好像  详情 回复 发表于 2016-6-27 09:12
回复

使用道具 举报

7#
发表于 2016-6-27 09:13:54 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-27 09:16 编辑

批处理的解释器再加上reg命令的解释器把特殊字符的处理搞的非常麻烦。像双引号就是特殊字符,nttwqz给的批处理里面命令经过两重解释道注册表中,程序部分是没有引号的,所以会无法识别带空格的路径。
想要路径带引号,命令要这样写,为了处理这字符串,我昨天都在5楼开骂了。
  1. reg add HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip\ /ve /t REG_EXPAND_SZ  /D """%%systemroot%%\7zip\7zFM.exe"" "^"%%1^""" /f
复制代码

命令效果如下

点评

多谢!照葫芦画瓢出问题了…… 下面这种怎么改?(还有^符号……,不知道怎么来套格式了) 空闲时帮忙看下,不耽误工作,多谢! REG ADD HKCR\7-Zip.7z\DefaultIcon /VE /T REG_SZ /D ""%%cd%%\7z.dll,0"" /F R  详情 回复 发表于 2016-6-27 09:42
回复

使用道具 举报

8#
发表于 2016-6-27 09:31:12 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-27 09:44 编辑
netmjwork 发表于 2016-6-27 09:12
不怕您笑话,上次那段儿代码没看太明白,方便的话帮忙注释下每行,以后会用到,多谢!
有几个问题不确定 ...


我用的是msi格式的安装包,这种安装包是使用Windows Installer服务进行安装的,天生支持静默安装。
静默安装方法为:Msiexec /q /I 程序包名称,
也可以是:程序包 /q或者/qn。
如果是可能会重启的安装程序,可以加/norestart参数不重启,你在运行或者cmd中打Msiexec,可以看帮助。

解压路径是%ProgramW6432%,%ProgramW6432%是环境变量哈和%systemroot%还%windir%是一样的,值是Program Files文件夹。
你在CMD中输入set命令,可以查看当前CMD窗口的环境变量和自定义变量,比如set tmp0=%ProgramW6432%,就是定义了自定义变量tmp0。
for %%x in ("%tmp0%") do set tmp0=%%~sx是把路径转换为8.3格式的短路径,因为7z的解压参数不支持路径带空格,但是我解压的目的地Program Files文件夹中间是带空格的,所以要转换路径格式。
你要是解压缩的路径不带空格,并且是确定的值比如是C:\123\345可以直接输
7z.exe 压缩包.7z -oc:\123\345
-o是指定解压路径,注意-o后面要紧跟路径,没有空格

要直接运行VBS,call命令最好,不像start命令那样因为空格会产生标题错误
"%homedrive%\Progra~1不就是Program Files文件夹吗,你直接用%ProgramW6432%变量就是了。call "%ProgramW6432%\office\go.vbs",call命令加了引号就不需要再转换为短路径了

点评

是的,我就是直接用短地址来作为相对路径的“绝对地址”,不至于跑到x86去,多谢! vbs一般用run命令多,一般情况下可以无视空格路径  详情 回复 发表于 2016-6-27 19:18
回复

使用道具 举报

9#
发表于 2016-6-27 09:48:26 | 显示全部楼层
窄口牛 发表于 2016-6-27 09:20
这个是要在pe里,还是系统里用的?

那批处理片段是我的SetupComplete.cmd一部分,因为我不封装系统,要后期处理和集成软件就只能用SetupComplete.cmd了。SetupComplete.cmd的作用类似于XP的T13或是T9整合,都是在oobe阶段调用的,不过windows7+oobe之后就不重启了。
回复

使用道具 举报

10#
发表于 2016-6-27 10:04:29 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-27 10:54 编辑
netmjwork 发表于 2016-6-27 09:42
多谢!照葫芦画瓢出问题了…… 下面这种怎么改?(还有^符号……,不知道怎么来套格式了)
空闲时帮忙看 ...


这个命令中^和\作用是一样的,都是转义符,意思是下一个字符是原本的字符,不是特殊标志符号。不过使用\会容易混淆,使程序更不易读,所以尽量用^,你把两个都用上肯定会出错的。
我估计你就把\的作用理解错了,确实是容易和路径中的\搞混,注意这命令中的\是转义符,不是命令必须的格式。我得研究研究完全不用\应该怎么写。
不能用%CD%,%CD%是临时变量,获得当前工作路径。如图所示红框部分的东西。

更不能用%%cd%%,即使这命令成功了,到注册表会把你的7z程序路径设置为%cd%\7zg.exe,运行的时候不知道shell解释不解释%cd%,就是解释了鬼知道当前工作目录是什么地方。
我不知道你的7z程序路径在哪,你直接把“%%systemroot%%\7zip\7zFM.exe”改成你的程序路径就行了,如果使用环境变量就要给变量加两个%%。

娘的,实在没有办法了,^没有办法转义空格,至少得写一个\
  1. reg add HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip\ /ve /t REG_EXPAND_SZ  /D ""^"%%systemroot%%\7zip\7zFM.exe"" ^""%%1"^"" /f
复制代码

求高手赐教,不用\做转义符,上面的命令怎么写。写入注册的数据为"%systemroot%\7zip\7zFM.exe" "%1",见下图

点评

一直以来,我都认为注册表reg中只能使用\转义,经过测试发现,可以用"代替,输入更方便(一个键上面)  详情 回复 发表于 2016-6-27 18:37
回复

使用道具 举报

11#
发表于 2016-6-27 20:26:26 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-27 20:56 编辑
netmjwork 发表于 2016-6-27 19:59
reg add HKLM\SOFTWARE\7-Zip\ /ve /t REG_EXPAND_SZ /d  "\"%HOMEDRIVE%\7zip\7zfm.exe\" %%0" /f
" ...


谢谢哈,echo y加在前面是不是后面的/f无法识别了,不过至少不用\了。
这个转义太见鬼了,我试试大杀器,把这命令拆成两句用变量看看。

搞不出来,抓狂 不搞了

点评

是呀,好奇怪,这个/f参数有时起作用,有时不起作用,看了下值,被当成值得一部分了,太坑爹了,所以干脆就在前面用了echo y|,也不知道是不是哪里写错了。  详情 回复 发表于 2016-6-27 21:18
回复

使用道具 举报

12#
发表于 2016-6-27 21:00:09 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-27 21:04 编辑
netmjwork 发表于 2016-6-27 20:29
没明白什么意思……?

好像是批处理前面没识别当前路径,单条执行的话看注册表输出的值是正确的:


用一个%把变量名括起来,就被cmd解释为变量的值,用两个%%括起来,就被解释为字符串:%变量名%。
你确定要用%cd%变量吗?这个变量是当前的工作目录,控制很难的,如果要是想指定当前批处理文件的路径最好用%~dp0

点评

只是觉得%cd%更方便些,特别对于绿色软件  详情 回复 发表于 2016-6-27 22:19
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-10-22 14:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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