Windows バッチファイルに JScript を混ぜ込む他のやり方

以前、Windows バッチファイルに JScript を混ぜ込んで、両方を起動させるやり方を紹介した。

今回、以下のページで別のやり方を発見したので紹介。

@set @temp=0/*
@echo off
cscript.exe //e:jscript //nologo "%~f0" %1
goto :eof
*/
WScript.Sleep(WScript.Arguments(0)*1000);

どうも、JScript にある @set ステートメントというものを上手く利用しているらしい。

@set @varname = term

こういうステートメントなので、それを1行目に書いてやる、と。そしてその1行目自体は、Windows バッチファイルとしてはコマンド文字列を出力しない @set コマンドとして見なされる、というワケだ。

その中身は適当に 0 などと値を与えつつ、後ろをブロックコメントの開始にしておくことで、JScript では解釈されず、Windows バッチだと2行目から Exit するまでをバッチファイルと認識する、という寸法だ。

@set @dummy=0/*
 ココに Windows バッチのコード (JScript にとってはコメントアウト)
 Exit (もしくは GoTo :EOF で終了する)
*/
ココに WSH JScript コード

最近とんと書かなくなった Windows バッチと WSH だが、まだまだ面白いと感じられている。