如何在 Windows 中转义 ftype 命令的空格?

如何在 Windows 中转义 ftype 命令的空格?

我创建了一个包含空格的新文件类型,并为其指定了打开命令:

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例如文本文件)。


我不知道为什么assocftype两者都允许您在 fileType/ProgID 字符串中使用空格,因为这违反了 MS 自己的指导方针。带有空格的 ProgID 甚至可以在注册表中手动创建时正常工作(我刚刚测试过),但值得注意的是,我发现没有一个使用空格的程序创建 ProgID。更奇怪的是,似乎ftype拒绝空格,而获得数据(引号没有帮助),而它却没有问题接受它们,同时环境首先是命令字符串(设置时甚至不需要引号)。

我猜是有人忘记通知ftype开发人员这个差异,因为我无法找到一种方法让命令检索它自己之前为包含空格的 ProgID 设置的命令字符串。我的建议是什么?遵守指导方针,不要在 ProgID 中使用空格,这样就免去了弄清楚 Windows 怪癖的麻烦。

相关内容