因此,我尝试创建一个右键单击上下文菜单选项,该选项将复制 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"
否则您的文件路径和名称将作为单独的参数出现在空白处。