如何在 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 所示。版本部分是可選的,但強烈建議使用。

您可以新增的文件類型描述友善類型名稱註冊表中的值。

例如:

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

這裡顯然是擴展和(預設)值設定為 ProgID ,即txt檔案

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

對於 ProgID,我們有(預設)值設定為文件類型描述,與友善類型名稱。一般來說,後者用於顯示本地化字串資源,並且必須格式化為間接字串(完全限定的檔案名稱和資源值,前面帶有 @ 符號,@%SystemRoot%\system32\notepad.exe,-469例如txt檔案)。


我不知道為什麼assoc,兩者ftype都允許您在 fileType/ProgID 字串中使用空格,因為這違反了 MS 自己的準則。如果在註冊表中手動建立(我剛剛測試過),帶有空格的 ProgID 甚至可以正常工作,但值得注意的是,我發現沒有任何使用空格的程式創建的 ProgID。更奇怪的是,似乎如何ftype拒絕空格,而得到數據(引號沒有幫助),而接受它們沒有問題環境首先是命令字串(設定時甚至不需要引號)。

我的猜測是有人忘記通知ftype開發人員這種差異,因為我無法找到一種方法讓命令檢索它之前為包含空格的 ProgID 設定的命令字串。我的建議?遵守指導原則,不要在 ProgID 中使用空格,這樣就可以省去試圖找出 Windows 怪癖的痛苦。

相關內容