使用环境变量指向“打开方式”程序

使用环境变量指向“打开方式”程序

我使用的是 Windows Vista,但我想这也适用于其他版本。我想设置一个要在“打开方式”上下文菜单中使用的程序。现在我希望 .exe 的路径包含一个环境变量。这样,我可以移动应用程序的位置,更改相应的环境变量,一切都会正常工作。

该问题有三个部分:

  1. 密钥的值

    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

  2. 密钥的类型是无法改变的,所以它生来如此REG_SZ,长存如此。

  3. 看来我不能“重新生成”变量为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"

相关内容