REG ADD语法问题

时间:2018-03-13 23:56:50

标签: batch-file registry

我正在尝试创建一个在注册表中创建条目的批处理文件。 该条目必须链接到可执行文件。它需要两个参数:

  1. (路径)要处理的文件夹(请参阅下面的 project1
  2. (path)将包含进程返回的文件的文件夹。我希望这是第一个参数的父文件夹(参见下面的 DirectoryProject
  3. 树:

    ../somewhere/my/program/program.exe
    ../DirectoryProject
    ../DirectoryProject/project1
    ../DirectoryProject/output.data
    

    例如:

    "../somewhere/my/program/program.exe" "../DirectoryProject/project1" "../DirectoryProject"
    

    第一个参数很简单,它是%% 1。它有我右键单击的文件夹路径作为值。然而,最后一个参数更难获得。 我首先尝试操纵变量%% 1。

    reg add "%RootKey%\Software\Classes\Directory\shell\%KeyName%\command" /VE /D "cmd /c cd \"%%1\" & \"%Exec%\" \"%%1\" \"%%~dp1\"" /F
    

    程序记录它所显示的参数。最后一个参数等于%% ~dp1,因此它不起作用。

    然后我尝试了使用第一个参数和CD命令

    的棘手方法
    reg add "%RootKey%\Software\Classes\Directory\shell\%KeyName%\command" /VE /D "cmd /c cd \"%%1\" & \"%Exec%\" \"%%1\" \"%CD%\"" /F
    

    在这种情况下,%CD%将始终是批处理文件的路径,所以显然不是我想要的内容

    我还在寻找

    感谢您的关注和帮助

1 个答案:

答案 0 :(得分:0)

如果%1的值是完全限定的现有路径,则根文件夹通常是驱动器号,后跟反斜杠,通常用%~d1\表示。但是,根据您的最新说明,您似乎正在寻找当前的工作目录,通常表示为%CD%

我假设你想操纵%1的第二个实例,所以根据我的评估,这是我如何做的:

@Echo Off
Set "ExePath=C:\SomePathTo\MadeUp.exe"
Set "MenuTxt=Process with MadeUp"
Set "KeyName=LaunchTest"
Set "RootKey=HKCU"
Reg Add "%RootKey%\Software\Classes\Directory\shell\%KeyName%" /VE /D "%MenuTxt%" /F >Nul
Reg Add "%RootKey%\Software\Classes\Directory\shell\%KeyName%\command" /VE /D "\"%ExePath%\" \"%%~1\" \"%CD%\"" /F >Nul
  • 请确保根据需要修改2行上的特定可执行路径。
  • 请注意,您可以在上下文菜单中更改所需的文字说明Process with MadeUp以符合您的偏好,您可以在3行进行。
  • 我已经保留了您的注册表项名称LaunchTest,这可以在行4中更改(当它不再是测试时)。 < / LI>
  • 应该在HKCU键中输入用户菜单条目,因此我正在使用它。
    (如果您想要所有用户,请将HKCU更改为{行HKLM上的{1}}。虽然它与您提供的密钥不符,但这是正确的方法。来自5HKCU\Software\Classes的条目会自动传播到{{ 1}},你不应该直接添加东西。
    如果你把它改为HKLM\SOFTWARE\Classes,请注意脚本可能需要以管理员的身份运行
  • 如果您需要右键单击文件夹的根目录,则可以在HKCR行上将HKLM更改为\"%CD%\"