Windowsにプログラム突っ込むとパスを通すのが面倒なのです。
linux なら .bashrc に書けるじゃん。
Windowsは次の理由で面倒だった。
Windowsでパス( PATH )を通すには、次の方法があります。
- Windows提供のプログラムを使う(マイコンピュータから)
- レジストリから変更する
両方ともUACが必要ですし、レジストリ変えたら、ログオフだし。マイコンピュータから変更すると、編集が面倒だし。
なにより、どこにナニを書いたのかコメントが残せない。なぜこのPATHを通したか。記録が残らない。不便すぎる。
スクリプトで管理する方法を考えた
専用のアプリ使っても良いんですが、「履歴が残らない」「コメント残せない」ので、ちょっともどかしい。
しかたないので、PATHを変更するJScriptを書いておいた。
レジストリを操作してPATHを書き換える.js
//TakuyaのカスタムPATH var my_path_list =[ 'C:\\Users\\takuya\\apps\\nmap-5.21', 'C:\\Users\\takuya\\apps\\win-bash', 'C:\\Users\\takuya\\apps\\vim\\vim73', 'C:\\Users\\takuya\\ruby\\bin', 'C:\\Python26', 'C:\\Program Files\\mingw\\bin', 'C:\\Program Files\\Mercurial', 'C:\\Users\\takuya\\apps\\gnuwin32\\bin', 'C:\\Users\\takuya\\apps\\tidy', 'C:\\Users\\takuya\\php', ]; //ユニーク Array.prototype.uniq = function(){ tmp = {};tmp_arr = []; for( var i=0;i<this.length;i++){tmp[this[i]] = i;} for( i in tmp){tmp_arr.push(i);} return tmp_arr; } //ゴミは掃除 Array.prototype.trim_empty = function(){ a=[]; for( var i=0;i<this.length;i++){ if(this[i]==""){continue} if(!this[i]){continue} a.push(this[i]); } return a; } //既存のパスを読み込んで展開する。 function path_dirs(){ var shell =new ActiveXObject("WScript.Shell"); var key = "HKEY_CURRENT_USER\\Environment\\PATH"; var value = shell.RegRead(key); path_list = value.split(";"); array=[] for( var i=0;i<path_list.length;i++){ if(path_list[i]==""){continue} array.push(path_list[i]); } return array; } function set_path( path_list ){ var shell =new ActiveXObject("WScript.Shell"); var key = "HKEY_CURRENT_USER\\Environment\\PATH"; shell.RegWrite( key, path_list.join(";") , "REG_EXPAND_SZ") } paths= path_dirs().concat(my_path_list).trim_empty().uniq(); set_path(paths); /** * WMI をWSHから起動して引数に一致するなまえのプロセスを殺す。 * @argment program_name プログラム名(たいていは ***.exe) */ function TerminateProcess( program_name ){ var strComputer = "."; var name = "winmgmts:\\\\" + strComputer + "\\root\\CIMV2"; var oWmis = GetObject(name); var cols = oWmis.ExecQuery("SELECT * FROM Win32_Process WHERE Caption = '"+ program_name +"'") var list = new Enumerator(cols) for(;!list.atEnd(); list.moveNext()){ var proc = list.item(); proc.terminate() } } TerminateProcess("explorer.exe");
これで、自分がナニを何時入れたのか分かるようになりました。git / mercurial で履歴取れるので楽になりました。
昔々の人達ははautoexec.bat 使ってたのかな?
テキストファイルは偉大です。
達人プログラマに書いて有るとおり、テキストファイルは偉大です。