Как экранировать пробелы в команде ftype в Windows?

Как экранировать пробелы в команде ftype в Windows?

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

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

Вы делаете это неправильно. Сначала немного фонового чтения на MSDN:

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

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

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

Например:

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

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

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

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


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

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

Связанный контент