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"

ここ。TXT明らかに拡張であり、(デフォルト)値は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は1つも見つかりませんでした。さらに奇妙なのは、ftypeスペースを拒否しているように見えることです。取得データ(引用符は役に立ちません)を受け入れるのに問題はありませんが、設定まず最初にコマンド文字列を指定します (設定時に引用符は必要ありません)。

私の推測では、誰かが開発者にこの矛盾を知らせるのを忘れたのでしょうftype。なぜなら、スペースを含む ProgID に対して、コマンドが以前に設定したコマンド文字列を取得する方法がわからなかったからです。私のアドバイスは? ガイドラインに従い、ProgID にスペースを使用せず、Windows の癖を理解しようとする苦労を省くことです。

関連情報