无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
12
返回列表 发新帖
楼主: netmjwork
打印 上一主题 下一主题

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

  [复制链接]
31#
 楼主| 发表于 2016-6-27 08:45:24 | 只看该作者
singel 发表于 2016-6-26 23:27
XP系统不支持注册表写目录式子菜单,NT6以上才支持

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

使用道具 举报

32#
发表于 2016-6-27 08:45:40 | 只看该作者
netmjwork 发表于 2016-6-27 08:33
谢谢鼓励!

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

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

使用道具 举报

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

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



回复

使用道具 举报

34#
 楼主| 发表于 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
回复

使用道具 举报

35#
发表于 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
复制代码

命令效果如下
回复

使用道具 举报

36#
发表于 2016-6-27 09:20:51 来自手机 | 只看该作者
这个是要在pe里,还是系统里用的?

点评

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

使用道具 举报

37#
发表于 2016-6-27 09:21:42 来自手机 | 只看该作者
c盘下直接7zip文件夹,不乱吗?
回复

使用道具 举报

38#
发表于 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命令加了引号就不需要再转换为短路径了
回复

使用道具 举报

39#
 楼主| 发表于 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
回复

使用道具 举报

40#
发表于 2016-6-27 09:48:26 | 只看该作者
窄口牛 发表于 2016-6-27 09:20
这个是要在pe里,还是系统里用的?

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

使用道具 举报

41#
发表于 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",见下图
回复

使用道具 举报

42#
发表于 2016-6-27 18:37:12 来自手机 | 只看该作者
pogua007 发表于 2016-6-27 10:04
这个命令中^和\作用是一样的,都是转义符,意思是下一个字符是原本的字符,不是特殊标志符号。不过使用 ...

一直以来,我都认为注册表reg中只能使用\转义,经过测试发现,可以用"代替,输入更方便(一个键上面)


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

点评

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"%"  详情 回复 发表于 2016-6-27 19:59
回复

使用道具 举报

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

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

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

使用道具 举报

44#
 楼主| 发表于 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
回复

使用道具 举报

45#
发表于 2016-6-27 20:07:29 | 只看该作者
netmjwork 发表于 2016-6-27 19:59
reg add HKLM\SOFTWARE\7-Zip\ /ve /t REG_EXPAND_SZ /d  "\"%HOMEDRIVE%\7zip\7zfm.exe\" %%0" /f
"C: ...
%HOMEDRIVE%


你后面加了,前面为何不加?%%HOMEDRIVE%%

点评

没明白什么意思……? 好像是批处理前面没识别当前路径,单条执行的话看注册表输出的值是正确的: REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\77zzmax\command /VE /  详情 回复 发表于 2016-6-27 20:29
回复

使用道具 举报

46#
发表于 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无法识别了,不过至少不用\了。
这个转义太见鬼了,我试试大杀器,把这命令拆成两句用变量看看。

搞不出来,抓狂 不搞了
回复

使用道具 举报

47#
 楼主| 发表于 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
回复

使用道具 举报

48#
发表于 2016-6-27 21:00:09 | 只看该作者
本帖最后由 pogua007 于 2016-6-27 21:04 编辑
netmjwork 发表于 2016-6-27 20:29
没明白什么意思……?

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


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

使用道具 举报

49#
发表于 2016-6-27 21:18:17 | 只看该作者
本帖最后由 nttwqz 于 2016-6-27 22:11 编辑
pogua007 发表于 2016-6-27 20:26
谢谢哈,echo y加在前面是不是后面的/f无法识别了,不过至少不用\了。
这个转义太见鬼了,我试试大杀 ...


是呀,好奇怪,这个/f参数有时起作用,有时不起作用,看了下值,被当成值得一部分了,太坑爹了,所以干脆就在前面用了echo y|,也不知道是不是哪里写错了。


我突然感觉我是哪里写错了,记得没错的话,/d 后面的值如果有空格,应该用""引起来,而被注册表键值本身的引号吸引了,以至于忘了两头的双引号,等会再试试……


果然,多加了一对引号,/f参数就管用了

  1. reg add HKLM\SOFTWARE\7-Zip\ /ve /t REG_EXPAND_SZ /d """"%"systemdrive"%"\7zip\7zFM.exe""" """%1"""" /f
复制代码


不过,这样看起来不容易理解,不如原来的\"容易理解。

  1. reg add HKLM\SOFTWARE\7-Zip\ /ve /t REG_EXPAND_SZ /d ""%%systemdrive%%\7zip\7zFM.exe" "%%1"" /f
复制代码


我的理解是,"也是特殊字符,键值里包含",除了使用\转义之外,还可以使用一对""将"引起来,就是"""这样了,再在两头加一对引号,所以两边就有了四个引号。
回复

使用道具 举报

50#
发表于 2016-6-27 22:03:39 | 只看该作者
netmjwork 发表于 2016-6-27 20:29
没明白什么意思……?

好像是批处理前面没识别当前路径,单条执行的话看注册表输出的值是正确的:
  1. @ECHO OFF
  2. rem 自动请求以管理员权限运行
  3. echo CreateObject^("Shell.Application"^).ShellExecute "%~f0", "", "", "runas", 1 > "%temp%\getadmin.vbs"
  4. reg query HKU\S-1-5-20>nul 2>nul||cscript //b "%temp%\getadmin.vbs"&&del "%temp%\getadmin.vbs" /f /q>nul 2>nul&&exit /b
  5. pushd %~dp0

  6. ECHO 1. 增加带子菜单的右键菜单77zz并关联.7z
  7. ECHO 2. 删除带子菜单的右键菜单77zz并取消关联.7z
  8. echo.
  9. SET /P SEL=
  10. echo.
  11. IF %SEL%==2 CALL :DEL
  12. IF %SEL%==1 CALL :ADD
  13. echo.
  14. echo.
  15. PAUSE
  16. EXIT

  17. :ADD
  18. REM 设置关联
  19. if not exist %~dps07zfm.exe echo 未发现7-Zip主程序,请将我放在7-Zip根目录下。&pause>nul&exit
  20. REG ADD HKCR\.7z /VE /D "7-Zip.7z" /F
  21. REG ADD HKCR\7-Zip.7z /VE /D "7z Archive" /F
  22. REG ADD HKCR\7-Zip.7z\DefaultIcon /VE /T REG_SZ /D "%~dps07z.dll,0" /F
  23. REG ADD HKCR\7-Zip.7z\shell\open\command /VE /T REG_EXPAND_SZ /D ""%~dp07zFM.exe" "%%1"" /F

  24. REM ------------------------增加带子菜单的右键菜单------------------------>>

  25. REM 定义子菜单具体内容
  26. REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\77zzmax /VE /D "极限压缩为7z" /F
  27. REM 注意:你提供的极限压缩命令有问题,请自己解决,我懒的研究了。
  28. REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\77zzmax\command /VE /D ""%~dp07zg.exe" a -r -t7z -mx9 "%%1" .7z "%%1"" /F
  29. REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\OpenWith77zz /VE /D "用7Z打开" /F
  30. REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\OpenWith77zz\command /VE /D ""%~dp07zFM.exe" "%%1"" /F

  31. REM 定义子菜单要项目名称列表
  32. REG ADD HKCR\*\shell\77zz /V "SubCommands" /D "77zzmax" /F
  33. REG ADD HKCR\7-Zip.7z\shell\77zz /V "SubCommands" /D "77zzmax;OpenWith77zz" /F
  34. REM 定义名称,默认77zz可以省略此键值
  35. REG ADD HKCR\*\shell\77zz /V "MUIVerb" /D "77zz" /F
  36. REM 定义图标,不要可以省略此键值
  37. REG ADD HKCR\*\shell\77zz /V "Icon" /D "%~dps07z.dll,0" /F
  38. REG ADD HKCR\7-Zip.7z\shell\77zz /V  "Icon" /D "%~dps07z.dll,0" /F

  39. REM 增加文件夹右键菜单和显示的子菜单
  40. REG ADD HKCR\Directory\shell\7zz /V "SubCommands" /D "77zzmax" /F
  41. REM 定义图标,不要可以省略此键值
  42. REG ADD HKCR\Directory\shell\7zz  /V "Icon" /D "%~dps07z.dll,0" /F
  43. REM <<------------------------增加带子菜单的右键菜单------------------------
  44. GOTO :EOF

  45. :DEL
  46. REM 清理关联
  47. REG DELETE HKCU\Software\7-Zip /F 2>NUL
  48. REG DELETE HKCR\.7z /F 2>NUL
  49. REG DELETE HKCR\7-Zip.7z /F 2>NUL

  50. REM 清理右键菜单
  51. REG DELETE HKCR\*\shell\77zz /F 2>NUL
  52. REG DELETE HKCR\Directory\shell\7zz /F 2>NUL
  53. REG DELETE HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\77zzmax /F 2>NUL
  54. REG DELETE HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\OpenWith77zz /F 2>NUL
  55. GOTO :EOF
复制代码

点评

非常感谢! 终于搞定了~  详情 回复 发表于 2016-6-27 22:20
回复

使用道具 举报

51#
发表于 2016-6-27 22:15:53 | 只看该作者
本想着,干脆学下NSIS,正好我也有这需求,重新打包一下7-zip,为楼主定制一个7-zip全静默安装包,但是简单看了下,好像又相当于要学一门脚本语言……
回复

使用道具 举报

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

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

使用道具 举报

53#
 楼主| 发表于 2016-6-27 22:20:48 | 只看该作者

非常感谢!
终于搞定了~

点评

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

使用道具 举报

54#
发表于 2016-6-27 23:04:21 | 只看该作者
netmjwork 发表于 2016-6-27 22:20
非常感谢!
终于搞定了~

XP能显示子菜单了???
回复

使用道具 举报

55#
发表于 2016-9-13 15:14:19 | 只看该作者
经验之谈,谢谢楼主了,请继续努力












民间捉鬼师,重庆民间道士
回复

使用道具 举报

56#
发表于 2017-2-3 09:13:29 来自手机 | 只看该作者
@echo off reg add "HKCR\7-Zip.zip\shell\open\command" /ve /t reg_expand_sz /d "\" %SystemDrive% \7zip\7zFM.exe\" \"%%1\"" /f
回复

使用道具 举报

57#
发表于 2017-2-13 09:27:25 | 只看该作者
感谢分享,谢谢楼主
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-4 04:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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