文件类型操作上的 Windows 文件名参数处理

文件类型操作上的 Windows 文件名参数处理

我有一个工具,我将其添加到 HKEY_CLASSES_ROOT 下的任何文件键的 shell 子键中,以便它出现在任何文件的右键菜单中(目录菜单中也有这个)。

[HKEY_CLASSES_ROOT\*\shell\PathToClipboard]
@="Path -> Clipboard"

[HKEY_CLASSES_ROOT\*\shell\PathToClipboard\command]
@="C:\\Program Files (x86)\\PathToClipboard.exe %1"

该工具只不过将给定的参数(文件路径)复制到剪贴板。

至少从 Win ME 开始,这种方法就一直有效(可能从那时起就重新编译了)。这种方法也适用于 win-7,但有一些怪癖:如果文件路径包含空格或任何其他非字母数字字符,则会缩短为 DOS 兼容名称。

例如:C:\PROGRA~2\PATHTO~1.EXE

有没有解决的办法?

如果我把"路径放在%1正确的位置,但 Windows 也会将其传递"给程序(我已经很久没有碰过它了。当然我可以在工具中解决这个问题,但我想知道是否可以在 Windows 端修复这种粗鲁的行为)。

答案1

如果程序名称包含空格或其他非字母数字字符,则缩短为 DOS 兼容名称。

@="C:\\Program Files (x86)\\PathToClipboard.exe %1"

引号应该括住各个部分,而不是整个字符串。

在这种特殊情况下,你应该只引用第一部分(程序名称)整个字符串:

@="\"C:\\Program Files (x86)\\PathToClipboard.exe\" %1"

笔记:

  • \用于转义内部引号(程序名称周围的引号)
  • 如果您还引用%1(文件路径),它将在将文件路径传递给程序时添加引号,因此不要引用这部分。

相关内容