適当にインスタントコマンドを羅列して抜き出す

■適当にインスタントコマンドを羅列して抜き出す
 xyzzylispでやれば簡単なんだけど、xyzzyないところだと使えないとかで、batファイルとかwshでやろうと思って、まずbatでアレコレしたんだけど置換が結構大変、一応単純な置換なら簡単に出来るんだけど正規表現とかで指定して置換みたいしないと汎用性がないので、アレな感じ。適当にbatは投げ出して*1wshへ逃亡。しかし始めからwshでやらなかった理由もあるわけで。vbは文法すら知らないからjscriptでやる事になるんだけど、javascriptってwebのだとファイルの入出力とかいらないから、その辺が全く不明だったり、ブラウザだと持ってるオブジェクトとかwshだとなさそうだし、面倒そうとか*2。まあ、gdgd思いながら結局やったんだけど。

■適当な使い方とか
 instant.iniと同じフォルダにtextファイル作ってコピペ、拡張子を.jsに変えて作ったファイルをダブルクリック。するとポップアップで作られたファイルの中身が出来て、同じディレクトリの中にinscmdlist.txtというファイルが出来ているはず。中身はインスタントコマンドの中身だけ抜き出したもの。

//  test.js -pickup instant command in instant.ini 
var FSO , readStream , readString , writeStream;
var ForReading   = 1;
var ForWriting   = 2;
var ForAppending = 8;
var WshShell = WScript.CreateObject ("WScript.Shell");
var curDir   = WshShell.CurrentDirectory; //現在のdirectory
var instantfile = curDir.concat("\\instant.ini"); //instantfileのパス
var makefile    = instantfile.replace(/instant\.ini/ , "inscmdlist.txt");//listのパス

FSO = new ActiveXObject("Scripting.FileSystemObject");
readStream = FSO.OpenTextFile(instantfile , ForReading, false);
readString = readStream.ReadAll();
//コマンドを適当に整形、見やすいように二回に分けてるけど一つでも良さそう。
//改行は人によって違いそうなので、もしミスったらこの辺が胡散臭い
readString = readString.replace(/(^;.*$\r\n)|(^$\r\n)|(^\[.*\]$\r\n)/mg , "");
readString = readString.replace(/(^[^=\n]*)=.*\n/mg , "$1\r\n");

writeStream = FSO.CreateTextFile( makefile , ForWriting, true);
writeStream.write(readString);
WScript.Echo(readString);//デバグ用なのでecho要らないならこの行削除
writeStream.Close();
readStream.Close();

pathファイルに合体させる所までやっても良いんだけど、fenrirのpathファイルは排他的なので、fenrir動いていると上手くいかない感じと言うか、まあ色々面倒そうだったので取り合えず止めておいた。jscriptのコードがまともかどうかは不明なので、とりあえず動くかもしれない以上を望むなら止めておいた方がいい感じ。動かすにしてもinstant.iniのバックアップは取って使うべき。改行は\r\nでやってるから改行の形式違うとオカシナのが出来るかも。
■以下動でもいいgdgdな話
始めにやろうとしてたbatファイルでの話

findstr /B /R /I  "^[^=;\n]*=.*" instant.ini >TEMP.INI
for /f "delims=" %%A in (TEMP.INI) do call :sub "%%A"
set INSTANT_LINE=
goto :eof
:sub
set "INSTANT_LINE=%~1"
echo %LINE:abc=edf%>>TEMP.INI

こんな感じまではやったんだけど、置換が微妙すぎて面倒になってやめたというかやり方がわからなかった。

*1:コマンドの書いてある行を羅列するだけならFINDSTRとかで簡単に出来るんだけど。そこから困ったので放置

*2:この前F1してjavascriptのヘルプを表示する奴を作ってなかったらリファレンス引くだけで発狂して死ぬ所だったかもしれない。