Windows 注册表中命令的重定向

Windows 注册表中命令的重定向,windows,registry,contextmenu,md5,io-redirection,Windows,Registry,Contextmenu,Md5,Io Redirection,我正在尝试为每个文件添加一个右键单击选项,以便它执行一个命令。乍一看似乎很简单 右键单击选项 通过进入注册表编辑器,特别是HKCR\*\shell(代表每种文件类型的上下文菜单选项,因此为“*”),我添加了自己的键: HKEY_CLASSES_ROOT * shell my_right_click_option (Default) = "Click me!" command

我正在尝试为每个文件添加一个右键单击选项,以便它执行一个命令。乍一看似乎很简单

右键单击选项 通过进入注册表编辑器,特别是HKCR\*\shell(代表每种文件类型的上下文菜单选项,因此为“*”),我添加了自己的键:

HKEY_CLASSES_ROOT
    *
        shell
            my_right_click_option
            (Default) = "Click me!"
                command
                    (Default) = my_command
命令 在此之后,可单击的条目立即出现在上下文菜单中。 在我的例子中,该键称为“checkmd5”,命令键的“Default”值存储了单击时要执行的命令“my_command”。 命令是:

"C:\Quite_a_long_path\md5\md5.exe" -n "%1" | clip
-n选项(md5.exe开关)只是删除散列后显示的程序名。 %1将被右键单击的程序路径替换,如果任何路径包含一些空格,则使用双引号。 遗憾的是,我所能做的就是执行命令(出现并消失一个cmd窗口,这意味着cmd已经被执行),而且,为了确保这一点,我还使用了Process Monitor(来自SysInternals套件)进行了检查在出现和消失的小cmd窗口中执行的命令行,看起来我输入的命令正在完全按照我想要的方式执行。 尽管如此,即使在将“|clip”(将输出重定向到剪贴板)或“>file.txt”(到文件)[我也尝试使用文件的绝对路径]附加到命令后,剪贴板也不会更新,也不会使用命令的输出创建file.txt

我似乎不明白如何使它起作用。。 我们将非常感谢您对windows的任何帮助


再次感谢您的耐心,尤其是在这篇长文章结束后。

证明使用重定向的唯一方法是在要执行的命令之前添加
cmd.exe/C
,以便命令解释器(cmd.exe)理解重定向,而不是要执行的程序(aprogram.exe)

例如:
aprogram.exe-param0 string>C:\temp\file.txt

不起作用,因为aprogram.exe不知道如何操作重定向。
相反,它应该是:

cmd.exe/C aprogram.exe-param0 string>C:\temp\file.txt

重定向由命令处理器完成。如前所述,这将
| clip
传递到md5.exe。使用
cmd.exe/c
调用命令处理器。@RaymondChen感谢您为我指明了正确的方向