3

Я создал новый тип файла, содержащий пробелы, и определил для него команду открытия:

assoc .php="PHP Script"
ftype "PHP Script"="c:\program files (x86)\php\php.exe" -f "%1" -- %~2

Пока все хорошо, но теперь я не могу проверить, какая команда используется для открытия файлов этого типа:

ftype "PHP Script"
File type 'PHP' not found or no open command associated with it.

Я пытался использовать символ каретки, безрезультатно . Как я могу получить ftype, чтобы принимать пробелы для получения команды, используемой в настоящее время?

1 ответ1

3

Ты делаешь это неправильно. Во-первых, некоторые справочные материалы по MSDN:

Когда вы используете assoc .ext=fileType , этот fileType на самом деле является ProgID. Как указано в последней ссылке выше:

Правильный формат имени ключа ProgID - [Поставщик или Приложение]. [Компонент].[Версия], разделенные точками и без пробелов, как в Word.Document.6. Часть версии не является обязательной, но настоятельно рекомендуется.

Описание типа файла, которое вы можете добавить в качестве значения FriendlyTypeName в реестре.

Например:

[HKEY_CLASSES_ROOT\.txt]
@="txtfile"
"PerceivedType"="text"
"Content Type"="text/plain"

Здесь .txt , очевидно, является расширением, а значение (по умолчанию) установлено равным ProgID, т.е. txtfile.

[HKEY_CLASSES_ROOT\txtfile]
@="Text Document"
"FriendlyTypeName"="Text Document"

Здесь для ProgID у нас установлено значение (По умолчанию) для описания типа файла, и то же самое для FriendlyTypeName. В целом, хотя последний используется для отображения локализованных строковых ресурсов и должен быть отформатирован как косвенная строка (полное имя файла и значение ресурса, которому предшествует символ @, например @%SystemRoot%\system32\notepad.exe,-469 для txtfile).


Я не знаю, почему assoc и ftype позволяют использовать пробелы в строках fileType/ProgID, поскольку это противоречит собственным рекомендациям MS. ProgID с пробелами даже работают правильно, если они были созданы вручную в реестре (я только что проверил), но я обнаружил, что ни один ProgID не создан ни одной программой, использующей пробелы. Более странным остается то, как ftype видимому, отклоняет пробелы при получении данных (кавычки не помогают), в то время как у него нет проблем с их принятием при установке командной строки в первую очередь (кавычки даже не требуются при установке).

Я предполагаю, что кто-то забыл сообщить разработчикам ftype об этом несоответствии, потому что я не мог найти способ заставить команду получить командную строку, которую она сама ранее установила для ProgID, содержащей пробелы. Мой совет? Придерживайтесь рекомендаций, не используйте пробелы в ProgID и избавьте себя от горя, пытаясь выяснить причуды Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .