treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

続・ファイル拡張子の関連付けをなくす方法(コマンド使用)

以前<ファイル拡張子の関連付けをなくす方法 - treedown’s Report>にレジストリ操作でファイル拡張子の関連付けをなくす(初期化する)方法をご報告しましたが、これをコマンドでやってみたのでご報告です。うまくいかなかったけど。

レジストリ触りたくない

以前のやり方<ファイル拡張子の関連付けをなくす方法 - treedown’s Report>は、ユーザが実施する想定をしていないので、サッとレジストリエディタを開いてちょいちょいとレジストリ内の特定の拡張子のエントリを消していく、という方法でした。

しかし、「レジストリ触りたくない」とか「よく分からない、怖い」みたいな話を受けたのと、ユーザが誤ったエントリ(拡張子の関連付け)を登録してしまった際に自力で解除する方法はないかということで、考えた結果、昔のコマンドを使って関連付けを初期化する方法があったのを思い出しました。

テスト環境

テスト環境に同じ状況を用意。


テスト用の.psdファイルと、.aiファイルを用意。両方をpaint.netに関連付けさせるも、.aiの方はプラグインを入れておらず開けない状況に設定します。


この状態から、今回はコマンドラインで拡張子の関連付けを外していく、という操作を実施していきます。

コマンドassocとftypeで情報表示(を試してみる)

今回はassocコマンドとftypeコマンドを使って、ファイル拡張子の関連付けを解除します。かなり昔から存在するコマンドですがWindows10でも存在が確認できました。
「assoc /?」とか「ftype /?」でヘルプを確認することができますので、コマンドの説明は割愛。

ちょっとやってみます。「assoc %拡張子%」と実行してみると、


--------------------------------------------------------------
c:\temp>assoc .txt
.txt=txtfile

c:\temp>assoc .pdf
.pdf=Acrobat.Document.DC
--------------------------------------------------------------

こういう感じで拡張子の説明が出てきます。関連付けされていない拡張子は「拡張子 %拡張子名% のファイルの関連付けが見つかりません」とメッセージが表示されます。

この表示された拡張子の説明を次のftypeコマンドの引数につけて実行します。
「ftype txtfile」とか「ftype Acrobat.Document.DC」という具合に実行してみると、

--------------------------------------------------------------
c:\temp>ftype txtfile
txtfile="%SystemRoot%\system32\NOTEPAD.EXE" %1

c:\temp>ftype Acrobat.Document.DC
Acrobat.Document.DC="C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe" "%1"
--------------------------------------------------------------

このような感じでファイル拡張子に関連付けされた起動するプログラムのフルパスが表示されます。

このコマンドで拡張子の関連付けも変更することができます。

実際に拡張子の関連付けを解除してみる(うまくいかない)

さっそくassocで.aiを確認してみます。解除は

assoc .ai=

という具合に、拡張子に「=」を付与して(なにも代入されないという意味のブランクで)実行することでファイル拡張子の関連付けを解除します。
また、ファイルタイプで起動するアプリケーションの関連付けはftypeコマンドで、

ftype ai_auto_file=

という具合に、ファイルタイプの指定をして解除します。さっそくやってみました。

ん?関連付けは見つからないし、ユーザ権限では「アクセスが拒否されました」となってしまいます。それではと「管理者で開いたコマンドプロンプトでは、


「アクセスが拒否されました」は出なかったものの、ファイルタイプが探せずにエラーになってしまいました。うーん。

別の拡張子(.html)でも試してみる

例えば、htmlファイルでassocコマンドとftypeコマンドを試してみます。


このような環境で、.htmlの関連付けを解除してみるという試み。

assoc .html=

と実行してみると、

「アクセスが拒否されました」となってしまったので、管理者コマンドプロンプトで再度実行、

やってみた後で、test.htmlをダブルクリックしてみたところ、


ファイルを開くために関連付けするアプリケーションの選択画面が出てきました。どうやら.htmlという拡張子ならコマンドで実行できるらしい。

動作の違いを確認するため、同じHTMLファイルでも「.htm」の方は従来の関連付けのままなので、ダブルクリックすると、デフォルトブラウザであるMicrosoft Edgeでファイルが開いてきます。

結論:assocコマンドで制御するには範囲がある

結論として、assocコマンドをオプションなしで実行したときに一覧で表示される


この中に含まれていない拡張子は、今回やってみたassocコマンドとftypeコマンドで拡張子の関連付けを制御する方法の対象外になってしまうらしい。(やり方があるのかもしれないけど今回は分からなかった)

もしかしたら、やり方があるかもしれないし、assocコマンドとftypeコマンド自体がWindows NT 4.0時代からあるレガシーなコマンドなので、制御できる範囲が違うのかも、と思いました。

※後で調べたところではassocコマンドはHKEY_CLASSES_ROOTに登録された拡張子情報を取り扱うらしい。.aiとか.psdファイルは「HKEY_CURRENT_USER\SOFTWARE\Classes」の拡張子情報を使っているので、この違いが関係ありそうな気がしてきました。