2018/11/10(土) [n年前の日記]
#2 [windows] 拡張子の関連付けを調べたり
「自分が使ってるWindowsが、どの拡張子にどのプログラムを関連付けしてるのか、自分で把握できてない」というのはやっぱりちょっと恥ずかしいなと思ったので調べる方法をググってみたり。たしか記憶では… assoc なるコマンドが関係していた…ような気がする…。
_コマンドプロンプト assoc - [ファイルと拡張子の関連を表示・設定する]
やはりそうだったらしい。assoc で調べられる。
とりあえずDOS窓で、.pl、.rb、.py について確認してみたりして。
APerl とか Ruby200 って何だろう。おそらく、アプリケーションの種類を示す何かだろう…。それぞれどんなアプリケーションが割り当てられているかは、ftype で調べることができる模様。
_コマンドプロンプト ftype - [拡張子に関連付けられているアプリケーションを設定する]
DOS窓で打ち込んで調べてみる。
ところが、自分の環境において、DOS窓上で直接 .rb を実行してみると、違うバージョンのRubyが使われるようで。
以下のようなスクリプトを書いて実行してみると…。
どうやら、エクスプローラ上でダブルクリックした時の関連付けでは、Ruby 2.4.3 になっているから、っぽいなと。 *2 自分の環境では、エクスプローラ上で、.rb、.rbw は、Ruby 2.4.3 に関連付けされていて、assoc や ftype で調べたソレとは違う関連付けになっている。更に、.py、.pyw は、pythonw.exe に関連付けされてるように見えたけど、ダブルクリックして見ると IDLE が起動するという…。何故。
どうやら Windowsは、関連付けに関して、3〜4種類の設定があるようで。
_ASCII.jp:最新のWindowsにおけるファイルの関連づけを分析する (2/2)|Windows Info
_Windowsの関連付けを決めるレジストリの優先順位とassoc ftypeが効かない問題について - イム日記
_レジストリの直接編集によるファイルの拡張子と関連づけ - Glamenv-Septzen.net
ややこしいな…。関連付けにも優先順位があるらしい…。
自分の環境の場合、.rb については、
更に、環境変数PATHには、Ruby 2.2.6 のインストールフォルダが登録されているので、ruby.exe を実行した際は 2.2.6 が使われる。だから、hoge.rb を直接実行した場合と、ruby hoge.rb で実行した場合で、異なるバージョンのRubyが使われるわけで。ややこしい。
とまあ、このように面倒臭いので、「ruby hoge.rb」「python hoge.py」の形で呼ぶことにしよう、.rb や .py を直接実行するのはやめておこう、とルールを決めて使っていたりするのでした…。
_コマンドプロンプト assoc - [ファイルと拡張子の関連を表示・設定する]
やはりそうだったらしい。assoc で調べられる。
とりあえずDOS窓で、.pl、.rb、.py について確認してみたりして。
> assoc .pl .pl=APerl > assoc .rb .rb=Ruby200 > assoc .py 拡張子 .py のファイルの関連付けが見つかりませんえっ。.py は何も関連付けしてなかったのか…。 *1
APerl とか Ruby200 って何だろう。おそらく、アプリケーションの種類を示す何かだろう…。それぞれどんなアプリケーションが割り当てられているかは、ftype で調べることができる模様。
_コマンドプロンプト ftype - [拡張子に関連付けられているアプリケーションを設定する]
DOS窓で打ち込んで調べてみる。
C:\home> ftype APerl APerl="C:\Perls\aperl589build827\bin\perl.exe" "%1" %* C:\home> ftype Ruby200 Ruby200="C:\Ruby\Ruby200\bin\ruby.exe" "%1" %*APerl は ActivePerl に関連付けしてあった模様。Ruby200は…コレ、Ruby 2.0.0 に関連付けしてあるのか…。古過ぎる…。まあ、ActivePerl もバージョンが古いまま使ってるのでアレなんだけど。
ところが、自分の環境において、DOS窓上で直接 .rb を実行してみると、違うバージョンのRubyが使われるようで。
以下のようなスクリプトを書いて実行してみると…。
#!ruby -Ks puts RUBY_VERSION
> showver.rb 2.4.3 > ruby --version ruby 2.2.6p396 (2016-11-15 revision 56800) [i386-mingw32] > ruby showver.rb 2.2.6assoc や ftype で確認した際には、.rb に Ruby 2.0.0 が関連付けされてるように見えたけど、.rb を直接実行してみると Ruby 2.4.3 が使われてしまう。何故。
どうやら、エクスプローラ上でダブルクリックした時の関連付けでは、Ruby 2.4.3 になっているから、っぽいなと。 *2 自分の環境では、エクスプローラ上で、.rb、.rbw は、Ruby 2.4.3 に関連付けされていて、assoc や ftype で調べたソレとは違う関連付けになっている。更に、.py、.pyw は、pythonw.exe に関連付けされてるように見えたけど、ダブルクリックして見ると IDLE が起動するという…。何故。
どうやら Windowsは、関連付けに関して、3〜4種類の設定があるようで。
_ASCII.jp:最新のWindowsにおけるファイルの関連づけを分析する (2/2)|Windows Info
_Windowsの関連付けを決めるレジストリの優先順位とassoc ftypeが効かない問題について - イム日記
_レジストリの直接編集によるファイルの拡張子と関連づけ - Glamenv-Septzen.net
ややこしいな…。関連付けにも優先順位があるらしい…。
自分の環境の場合、.rb については、
- HKEY_CURRENT_USER\Software\Classes\.rb の既定が RubyFile になっていて、
- HKEY_CURRENT_USER\Software\Classes\RubyFile\shell\open\command の既定が "C:\Ruby\Ruby24\bin\ruby.exe" "%1" %*
更に、環境変数PATHには、Ruby 2.2.6 のインストールフォルダが登録されているので、ruby.exe を実行した際は 2.2.6 が使われる。だから、hoge.rb を直接実行した場合と、ruby hoge.rb で実行した場合で、異なるバージョンのRubyが使われるわけで。ややこしい。
とまあ、このように面倒臭いので、「ruby hoge.rb」「python hoge.py」の形で呼ぶことにしよう、.rb や .py を直接実行するのはやめておこう、とルールを決めて使っていたりするのでした…。
[ ツッコむ ]
以上です。