我使用的是 Windows Vista,但我想这也适用于其他版本。我想设置一个要在“打开方式”上下文菜单中使用的程序。现在我希望 .exe 的路径包含一个环境变量。这样,我可以移动应用程序的位置,更改相应的环境变量,一切都会正常工作。
该问题有三个部分:
密钥的值
HKEY_CLASSES_ROOT\Applications\myapp.exe\shell\open\command
例如
"C:\myapp\myapp.exe" "%1"
, 是硬编码的,并且类型是REG_SZ
。我需要它是 类型REG_EXPAND_SZ
,例如"%MYAPPSDIR%\myapp.exe" "%1"
。这对于内置程序来说很常见,例如%SystemRoot%\system32\NOTEPAD.EXE %1
。密钥的类型是无法改变的,所以它生来如此
REG_SZ
,长存如此。看来我不能“重新生成”变量为
REG_EXPAND_SZ
。
我有可能实现我的意思吗?
还有一个奖励问题,如何在批处理文件中接收参数。
答案1
reg add "HKCR\Applications\myapp.exe\shell\open\command" /ve /t REG_EXPAND_SZ /d "\"^%MYAPPSDIR^%\myapp.exe\" \"^%1\"" /f
笔记:
- 为了避免
%MYAPPSDIR%
被命令行解释器扩展,%
百分号字符应该用标准CLI
转义字符(^
插入符号)进行转义:^%MYAPPSDIR^%
; "
要在数据中包含引号,请在其前面加上reg
转义字符(\
反斜杠)。例如,\"
这是一个引号,因为REG
命令会将\
其后紧跟的字符解释为转义。
一个例子(copy&paste
来自我的行政人员命令行):
C:\Windows\system32>reg query "HKCR\Applications\mspaint.exe\shell\edit\command" /ve
HKEY_CLASSES_ROOT\Applications\mspaint.exe\shell\edit\command
(Default) REG_EXPAND_SZ "%systemroot%\system32\mspaint.exe" "%1"
C:\Windows\system32>reg add "HKCR\Applications\mspaint.exe\shell\edit\command" /ve /t
REG_EXPAND_SZ /d "\"^%systemroot^%\system32\mspaint.exe\" \"^%1\"" /f
The operation completed successfully.
C:\Windows\system32>reg query "HKCR\Applications\mspaint.exe\shell\edit\command" /ve
HKEY_CLASSES_ROOT\Applications\mspaint.exe\shell\edit\command
(Default) REG_EXPAND_SZ "%systemroot%\system32\mspaint.exe" "%1"