InteractiveJS その2

前回のエントリが思ってた以上に反応が良かったので拡張してみました。
起動時にスクリプトのあるディレクトリに lib サブディレクトリがある場合、その中の拡張子が js のファイルを読み込んで eval します。lib ディレクトリにあらかじめ便利なスクリプトを入れておくと色々と楽できると思います。

// Interactive JavaScript.
//   http://d.hatena.ne.jp/nak2k/

function print(s) {
  WScript.StdOut.Write(s);
}

(function () {
  try {
    var fso = WScript.CreateObject("Scripting.FileSystemObject");
    var scriptPath = fso.GetParentFolderName(WScript.ScriptFullName);
    var folder = fso.GetFolder(scriptPath + "\\lib");
    var e = new Enumerator(folder.files);
    for(; !e.atEnd(); e.moveNext()) {
      var f = e.item();
      if (!f.Name.match(/\.js$/i)) { continue; }
      
      var fs = fso.OpenTextFile(f.Path, 1, false, -2);
      if (!fs.AtEndOfStream) {
        eval(fs.ReadAll());
      }
      fs.Close();
    }
  } catch(e) {
  }

  for(;;) {
    print("js> ");
    var l = WScript.StdIn.ReadLine();
    if (l == "!") {
      var a = [];
      while((l = WScript.StdIn.ReadLine()) != "!") {
        a.push(l);
      }
      l = a.join("\n");
    }
    try {
      var v = eval(l);
      print(v);
      print("\n");
    } catch(e) {
      print("Exception: ");
      print((e instanceof Error) ? e.message : e);
      print("\n");
    }
  }
})()

うーん……、エラー処理とか手を抜いてしまってる……。
あと、たとえば「@ファイル名」で指定した js ファイルを eval する機能とかも付加したいとこなんですけど、これ以上長くなる前にどこかファイルを置く場所をきちんと確保したほうがいいかな(^^;
WSHでやってるとCOMの扱いが楽なのがいいですね。例えば、IEExcelインタラクティブに連携させてIE上で表示しているページの構造をExcel上でレポートする、とかそういったこともできそうです。


他にもいくつかWindowsに特化したJavaScriptネタあるので、しばらくそういうの書いていってみます。