web-dev-qa-db-ja.com

コマンドラインで拡張子を付けずにファイル名を入力すると、ファイルが開かれるのはなぜですか?

Windows 10では、現在のフォルダーにtruffle.jsというファイルがあります。私は自分のパスのどこかにあるtruffleプログラムを呼び出すことを期待して、cmdウィンドウにtruffleを書きます。

代わりに、truffle.jsが私のお気に入りのIDEで開かれます(.jsファイルはそのIDEに関連付けられています)。私はこの振る舞いは実行ファイル.bat.comそして.exeに対してのみこのようなものであると思いました。どうして.jsファイルに起こるのですか?

注:その後、自分のパスにtruffleがまったくインストールされていないことを発見しましたが、私の疑問は残ります。なぜWindowsが実行不能ファイルに指定されていない拡張子を完成させるのですか?

トリュフをインストールしてcmdを再起動した後でも、ファイルtruffle.jsを含むフォルダで本物のトリュフを実行することはできません。

41
ripper234

デフォルトで%PATHEXT%.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCに設定されているからです。 .jsが含まれていることに注意してください。

つまり、名前を入力すると、CMDは現在のフォルダ内で、これらの拡張子が付いたファイルをこの順に探します。その後初めて、%PATH%の内容が考慮されます。この動作は変更できません。ただし、他の環境変数と同様に、%PATHEXT%を変更することもできます。

WHEREコマンドを使用して、どのパスが開かれるのか(例:where truffle)を確認できます。これにより、CMDと同じ方法で%PATH%と%PATHEXT%の両方が自動的に検索されます。

75
Daniel B