为什么这个 Windows 注册表命令不起作用?

为什么这个 Windows 注册表命令不起作用?

因此,我尝试创建一个右键单击上下文菜单选项,该选项将复制 Windows 7 中的文件路径。这是我的注册表内容:

[HKEY_CLASSES_ROOT\*\shell\Copy path]

[HKEY_CLASSES_ROOT\*\shell\Copy path\command]
@="C:\Windows\System32\Tweaks\ContextCopy.exe path %1"

该选项正确显示在上下文菜单中。ContextCopy.exe 将文件的绝对路径作为字符串,并根据第一个参数在内部将其复制到剪贴板。它工作正常,因为我已从命令提示符中测试过它,并使用最后一个参数的实际文件名。但每当我从上下文菜单中执行此操作时,我都会弹出一个错误,提示“此文件没有与之关联的程序来执行此操作。”这个弹出窗口的标题是我右键单击并打开菜单的文件的路径。该路径也不会复制到剪贴板。

我认为 %1 应该将文件的绝对路径以字符串形式给出,对吗?

答案1

您可以尝试在 %1 周围加上引号,以确保带有空格的路径被视为单个字符串。

因此通过 Regedit 将命令更改为:

C:\Windows\System32\Tweaks\ContextCopy.exe path "%1"

其将导出为:

[HKEY_CLASSES_ROOT\*\shell\Copy path]

[HKEY_CLASSES_ROOT\*\shell\Copy path\command]
@="C:\Windows\System32\Tweaks\ContextCopy.exe path \"%1\""

反斜杠转义嵌套的引号。

另外,由于您使用的是 Windows 7,因此您实际上并不需要小型 ContextCopy.exe 实用程序,因为您可以使用 Windows 的内置clip命令:

clip /?

夹子

描述:将命令行工具的输出重定向到 Windows 剪贴板。然后可以将此文本输出粘贴到其他程序中。

参数列表:

/?                  Displays this help message.

例子:

DIR | CLIP          Places a copy of the current directory
                    listing into the Windows clipboard.

CLIP < README.TXT   Places a copy of the text from readme.txt
                    on to the Windows clipboard.

因此你可以替换命令使用类似的方法cmd.exe /c echo "%1"|clip并获得相同的效果,无需第三方实用程序。

答案2

我明白了。我需要转义 .exe 路径中的反斜杠以及 %1 周围的引号:

[HKEY_CLASSES_ROOT\*\shell\Copy path]

[HKEY_CLASSES_ROOT\*\shell\Copy path\command]
@="C:\\Windows\\System32\\Tweaks\\ContextCopy.exe path \"%1\""

答案3

您(至少)需要在 %1 周围添加引号 -"%1"否则您的文件路径和名称将作为单独的参数出现在空白处。

相关内容