Ты делаешь это неправильно. Во-первых, некоторые справочные материалы по 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.