Windowsの環境変数のPATH
はシステム由来のものとユーザー由来のものがある。この両者はシステム由来のものの後にユーザー由来のものがくるので、ユーザー領域に放り込んだプログラムを優先的に探してもらうというようなことをする場合、パスを決め打ちでシステム由来のものに書く必要があった。.bashrc
的なもので環境変数をいじることができればよいのに……と、ずっと思っていたのだが、どうやらAutoRunという機能があり、それを使うと任意のバッチファイルをコマンド・プロンプトの起動時に実行してくれるようだ。
コマンド・プロンプトのAutoRunはレジストリーから有効にすることができる。ググるとシステム・レジストリーをいじらせるものが多いが、ユーザー・レジストリーで問題ない。
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
該当するキーは以上の場所だ。ここにAutoRun
という文字列で実行したいバッチファイルのパスを指定すれば良い。ユーザー・レジストリーであることから%USERPROFILE%\autoexec.bat
などでうまいこと指定しておくと安全だろう。即反映で、再起動などは必要ない。
何でもできるようなので、かなり使い勝手は良い。コマンド・プロンプトからコマンド・プロンプトを開いた時にも実行されることには注意が必要だ。
僕がやりたいことを要約すると、ユーザー領域に放り込んだプログラムをシステム他より優先して探してほしい、ということだった。つまりこのAutoRunに指定したバッチファイルで環境変数PATH
をいじってやれば良いことになる。
@echo off
set PATH=%USERPROFILE%\Programs;%PATH%
こういう優先をしたいことはごく稀にある。ImageMagickのconvert.exe
がWindowsに含まれるconvert.exe
と衝突するようなケースがそれで、リネームしてどうにかしようとすると、今度はそれを使うスクリプトのポータビリティーが下がってしまう。