まず、パスが通ってるところにこのバッチファイルを置く。
execAsCscript.bat
@echo off
cscript //nologo //E:JScript %1
次に、拡張子.bat でWSH/JScriptのファイルを作る。
ポイントは1行目の「execAsCscript = "%~f0"」
バッチファイルのコマンドとしても JavaScript のコードとしても有効なコード。
JavaScript としてはグローバル変数を1個消費するだけで特に何もしない。
バッチファイルとしては、別バッチの呼び出し。
CALLではなく直呼びなのでそのまま帰ってこず、それより下の JavaScript コードは無視される。
hello.bat
execAsCscript = "%~f0"
// JScriptをバッチとして実行する。
// パラメータ無し版
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Popup( "hello, world" );
私はMS-DOSの時代、JPerl.exe を使ってあれこれいろんなことをしていました。
当時、#!.exe という巧妙な仕掛けで、 Perlスクリプトを実行ファイル化していました。
それを思い出して、WSH/JScript で同じようなことが出来んかとあれこれ試して、とりあえずここまで来ました。
現状気に入らない点。
・ゴミが1行表示される。
・起動パラメータがエレガントに扱えない。
こんなもんはまあスクリプトごとに起動バッチを作っとけばいいって話ではありますが。
hello2.bat
CScript //nologo hello.js
とりあえずせっかくなので記録を残しておくことにしました。