LoginSignup
5
2

More than 3 years have passed since last update.

WSH/JScriptをバッチとして実行する(まだこんなことやってる

Posted at

以前、こんなのがありました。

WSH/JScriptをバッチとして実行する(何を言ってるのかわからない - Qiita
https://qiita.com/itasnasal/items/70b042f1fe96ef106c12

この時気に入らない点として

・ゴミが1行表示される。
・起動パラメータがエレガントに扱えない。

とあるが、それ以前に「別バッチを一つ用意する」というのがそもそも気に入らない。
特段の前準備とか無しで、起動するバッチファイル一個ですべてが解決できるようにしたい。

けど、そのままずっと忘れたままだった。

で、最近

WSH JScript Chakra エンジンの共存による機能制限の回避(WScript Quit 代替) - イネマルのプログラミング備忘録
https://inemaru.hatenablog.com/entry/2020/08/11/020312

これを見ていると、「WSH/JScriptをバッチとして実行する」のに、JScriptの条件コンパイルを利用していた。

JScriptの条件コンパイルという機能は、自分は「あるのはおぼろげに知っていたけど、詳細は全く知らない」状態だった。この機会にちょっと勉強してみた。

へー。こんな機能があったんだ。

32ビット/64ビットのチェックと切り替えに使えるな。今は SysWOW64 の有無で簡易チェックしてるけど、きちんとしたチェックができる。

それよりだ。

@set ステートメント

条件コンパイル ステートメントで使用する変数を作成します。

@set @varname = term 

これわっ。

@set @hogehoge=0 /*

と書けば、

JScriptでは条件コンパイル用変数設定+コメントの開始
バッチでは環境変数「@hogehoge」に「0 /*」を設定

となるじゃないですか。試してみたが大丈夫だ。

というわけで hello.bat を改良して hello2.bat にしてみた。

hello2.bat
@set @x=0 /*
@set @x=
@cscript //nologo //E:JScript "%~f0" %*
@exit /B
*/ // ↑でバッチ自体は終了するので、ここからはバッチからは無視される。
// ↓JScript コードを記述する

var WshShell = new ActiveXObject("WScript.Shell");

WshShell.Popup( "hello, world" );

ゴミ表示は出ないし、起動パラメータも普通に扱える。
おまけに「別バッチを一つ用意する」必要もない。

完璧じゃん。今のところ、特に不都合は見つかってない。

早速、現在検討中の案件で使ってみよう。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2