У меня есть инструмент, который я добавил в подраздел оболочки ключа any-file в разделе HKEY_CLASSES_ROOT, чтобы он появлялся в контекстном меню любого файла (он также есть в меню каталогов).
[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
(путь к файлу), то кавычки будут добавлены при передаче пути к файлу в программу, поэтому не заключайте эту часть в кавычки.