Обработка параметров имени файла Windows при действии типа файла

231
vlad_tepesch

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

1
Вы пробовали `" C: \ Program Files (x86) \ PathToClipboard.exe ""% 1 "`? обратите внимание на дополнительные `" и убранные обратные слеши. DavidPostill 8 лет назад 0
См. Также [Как отключить создание имени файла 8.3 на разделах NTFS] (https://support.microsoft.com/en-us/kb/121007). DavidPostill 8 лет назад 0
@DavidPostill вы не можете удалить двойную обратную косую черту из reg-файла. в реестре они конечно одиноки. но путь к программе между `" `решает проблему!`% 1` не должен быть между кавычками, иначе скопированный путь также будет иметь кавычки. Если вы опубликуете это как ответ, я приму его - Спасибо Вы! Ваше второе предложение кажется каким-то жестоким - я не знаю, нарушает ли оно другие вещи. vlad_tepesch 8 лет назад 0
Здорово, что у тебя это работает. Ответ добавлен;) DavidPostill 8 лет назад 0

1 ответ на вопрос

1
DavidPostill

If the program name contains spaces or other non alphanumeric characters it is shortened to the DOS compatibility Name.

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

The quotes should be around the individual parts, not the complete string.

In this particular case, you should only quote the first part (program name) and the whole string:

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

Note:

  • \ is used to escape the inner quotes (those around the program name)
  • If you also quote the %1 (the filepath) it will add the quotes when the filepath is passed to the program, so don't quote this part.
правильная строка reg-file-export будет выглядеть так: `@ =" \ "C: \\ Program Files (x86) \\ PathToClipboard.exe \"% 1 "` в regedit.exe будет отображаться как `" C : \ Program Files (x86) \ PathToClipboard.exe "% 1` кавычки вокруг всего выражения (и экранирования внутри него) после` @ = `являются обязательными, в противном случае regedit выдаст ошибку разбора при чтении` .reg файл ` vlad_tepesch 8 лет назад 0
Ах. ХОРОШО. Ответ обновлен. DavidPostill 8 лет назад 0
Первоначально я использовал формат экспорта `.reg`-File, потому что я думал, что это будет хороший формат для точного определения структуры значений и путей (лучше, чем запись String-Value значения по умолчанию под ключом XY), но теперь я Я думаю, что я добавил путаницу по поводу фактического значения (с точки зрения того, что показано в и вставить в regedit.exe) vlad_tepesch 8 лет назад 0
@vlad_tepesch я думаю все понятно как сейчас;) DavidPostill 8 лет назад 0