普通っぽい日記(その2)〜JScriptコンソール〜

JavaScriptコンソール*1はだいぶ前に作っていましたが、JScriptのものがないので作ってみました。

JScriptコンソール〓
※拡張子jsで保存


(function() {

  var stdIn, stdOut, stdErr;

  if( (typeof WScript) != "undefined") {
    var execFile = WScript.FullName;
    if(!execFile) {
      WScript.Echo("現在の環境では実行できません。");
    } else if( (/^.*cscript\.exe$/i).test(execFile) ) {
      main();
    } else if( (/^.*wscript\.exe$/i).test(execFile) ) {
      open();
    } else {
      WScript.Echo("現在の環境では実行できません。" + "\n" + execFile);
    }
  } else if( (typeof window) != "undefined") {
    window.alert("WSH(WindowsScriptingHost)用のJScriptコンソールです。");
  }

function open() {
  var Shell = new ActiveXObject("WScript.Shell");
  var str = 'CMD /C CScript //Nologo "' + WScript.ScriptFullName + '"';
  for(var i = 0; i < WScript.Arguments.length; i++) {
    var arg = WScript.Arguments(i);
    if( (typeof arg) == "string") {
      if(arg.indexOf(" ", 0) >= 0) {
        arg = '"' + arg + '"';
      }
      str += ' ' + arg;
    } else  {
      break;
    }
  }
  //WScript.Echo(str);
  Shell.Run(str);
}

function main() {
  stdIn  = WScript.StdIn;
  stdOut = WScript.StdOut;
  stdErr = WScript.StdErr;
  while(!stdIn.AtEndOfStream) {
    var script;
    try {
      script = stdIn.ReadLine();
      eval(script);
    } catch(e) {
      if( (/^exit$/i).test(script) || (/^quit$/i).test(script) ) {
        break;
      } else {
        stdErr.WriteLine(e.message);
      }
    }
  }
}

})();

*1:いちいちファイルを作ることなくJavaScriptを実行できるGUI