我创建了一个包含空格的新文件类型,并为其指定了打开命令:
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
,文件类型实际上是进程ID。正如上面的最后一个链接所述:
ProgID 键名的正确格式是 [供应商或应用程序].[组件].[版本],用句点分隔,并没有空间,如 Word.Document.6。Version 部分是可选的,但强烈推荐。
您可以添加文件类型描述作为友好类型名称注册表中的值。
例如:
[HKEY_CLASSES_ROOT\.txt]
@="txtfile"
"PerceivedType"="text"
"Content Type"="text/plain"
这里。TXT显然是扩展和(默认)值设置为 ProgID,即文本文件。
[HKEY_CLASSES_ROOT\txtfile]
@="Text Document"
"FriendlyTypeName"="Text Document"
这里有 ProgID,我们有(默认)值设置为文件类型描述,同样适用于友好类型名称。一般来说,后者用于显示本地化的字符串资源,并且必须格式化为间接字符串(完全限定的文件名和资源值,前面加上 @ 符号,@%SystemRoot%\system32\notepad.exe,-469
例如文本文件)。
我不知道为什么assoc
,ftype
两者都允许您在 fileType/ProgID 字符串中使用空格,因为这违反了 MS 自己的指导方针。带有空格的 ProgID 甚至可以在注册表中手动创建时正常工作(我刚刚测试过),但值得注意的是,我发现没有一个使用空格的程序创建 ProgID。更奇怪的是,似乎ftype
拒绝空格,而获得数据(引号没有帮助),而它却没有问题接受它们,同时环境首先是命令字符串(设置时甚至不需要引号)。
我猜是有人忘记通知ftype
开发人员这个差异,因为我无法找到一种方法让命令检索它自己之前为包含空格的 ProgID 设置的命令字符串。我的建议是什么?遵守指导方针,不要在 ProgID 中使用空格,这样就免去了弄清楚 Windows 怪癖的麻烦。