Windowsの環境変数のPATHはシステム由来のものとユーザー由来のものがある。この両者はシステム由来のもののにユーザー由来のものがくるので、ユーザー領域に放り込んだプログラムを優先的に探してもらうというようなことをする場合、パスを決め打ちでシステム由来のものに書く必要があった。.bashrc的なもので環境変数をいじることができればよいのに……と、ずっと思っていたのだが、どうやらAutoRunという機能があり、それを使うと任意のバッチファイルをコマンド・プロンプトの起動時に実行してくれるようだ。

コマンド・プロンプトのAutoRunはレジストリーから有効にすることができる。ググるとシステム・レジストリーをいじらせるものが多いが、ユーザー・レジストリーで問題ない。

HKEY_CURRENT_USER\Software\Microsoft\Command Processor
レジストリー・エディターを使い、AutoRunにautoexec.batを仕込んでいる。

該当するキーは以上の場所だ。ここにAutoRunという文字列で実行したいバッチファイルのパスを指定すれば良い。ユーザー・レジストリーであることから%USERPROFILE%\autoexec.batなどでうまいこと指定しておくと安全だろう。即反映で、再起動などは必要ない。

何でもできるようなので、かなり使い勝手は良い。コマンド・プロンプトからコマンド・プロンプトを開いた時にも実行されることには注意が必要だ。


僕がやりたいことを要約すると、ユーザー領域に放り込んだプログラムをシステム他より優先して探してほしい、ということだった。つまりこのAutoRunに指定したバッチファイルで環境変数PATHをいじってやれば良いことになる。

@echo off

set PATH=%USERPROFILE%\Programs;%PATH%

こういう優先をしたいことはごく稀にある。ImageMagickのconvert.exeがWindowsに含まれるconvert.exeと衝突するようなケースがそれで、リネームしてどうにかしようとすると、今度はそれを使うスクリプトのポータビリティーが下がってしまう。