JScript

JScript は Microsoft Windows 上で実行できるスクリプト言語です。Windows Script Host (WSH) に基づくスクリプト言語のひとつで、JavaScript に似た構文を持ちます。WSH には JScript の他にもVBScript があります。この記事では、JScript の使い方を入門者向けにサンプルを交えてご紹介します。

wscript.exe

Windows Script Host の JScript は、インタラクティブ・モードとバッチ・モードの2つのモードで実行できる。

スクリプトをインタラクティブ・モードで動作させた場合、メッセージはメッセージ・ボックスで出力される。たとえば、次の内容を hello.js というファイル名で保存する。

WScript.echo("Hello, world!")

これをwscript.exeで実行すると、"Hello, world!" という文字列がメッセージ・ボックスで表示される。

C:\> wscript.exe hello.js
WScript
Figure 1. WScript

cscript.exe

Windows Script Host の JScript は、インタラクティブ・モードとバッチ・モードの2つのモードで実行できる。

スクリプトをバッチ・モードで動作させた場合、メッセージはコンソールの標準出力に出力される。たとえば、次の内容を hello.js というファイル名で保存する。

WScript.echo("Hello, world!")

これををcscript.exeで実行すると、"Hello, world!" という文字列がコンソールに表示される。

C:\> cscript.exe hello.js
CScript
Figure 2. CScript

文字列の連結

複数の文字列を連結するには、演算子「+」を使う。

s = "foo" + "bar" + "baz";

for

JScript において繰り返し処理を一定回数行うには、for 制御構造を使う。

for (i = 0; i < 10; i++) {
  sum += i;
}

配列の各要素について繰り返し処理を行うこともできる。

array = [1, 2, 3];

for (elem in array) {
  WScript.Echo(elem);
}

オブジェクトの各プロパティについて繰り返し処理を行うこともできる。

var obj = new Object();

obj.name = "Sato Neo";
obj.addr = "Saga";
obj.age = 15;

for (prop in obj) {
  WScript.Echo(prop);
}

※JScript に foreach 文は存在しない。foreach の代わりに for in 制御構造を使用する。

WScript.Echo

メッセージを出力するには、WScript.Echoメソッドを使用する。

WScript.Echo(message);

引数 message には、出力するメッセージ文字列を指定する。

メッセージを出力するスクリプトのサンプルを次に示す。

WScript.Echo("Hello, world!");

WScript.Arguments

コマンドライン引数を扱うには、WScript.Argumentsオブジェクトを使用する。

コマンドライン引数の個数は、Count()メソッドで参照することができる。また、 n 番目のコマンドライン引数は、WScript.Arguments( n - 1)で参照することができる。

すべてのコマンドライン引数を出力するスクリプトのサンプルを次に示す。

for (i = 1; i <= WScript.Arguments.Count(); i++) {
  WScript.echo(WScript.Arguments(i - 1));
}

WScript.FullName

ホストの実行可能ファイル (CScript.exe または WScript.exe) への絶対パスを返す。このプロパティは読み取り専用である。

WScript.Echo(WScript.FullName);

WScript.Path

ホストの実行可能ファイル (CScript.exe または WScript.exe) の格納先ディレクトリの名前を返す。このプロパティは読み取り専用である。

WScript.Echo(WScript.Path);

WScript.Quit

JScriptを終了する。

WScript.Quit();

終了コードを指定して終了することもできる。

WScript.Quit(1);

WScript.ScriptFullName

実行中のスクリプトへの絶対パスを返す。このプロパティは読み取り専用である。

WScript.Echo(WScript.ScriptFullName);

WScript.ScriptName

実行中のスクリプトのファイル名を返す。このプロパティは読み取り専用である。

WScript.Echo(WScript.ScriptName);

WScript.Sleep

指定時間スリープする(指定時間が経過するまで処理を停止する)には、WScript.Sleepメソッドを使用する。

WScript.Sleep(milliseconds);

引数 milliseconds には、待機する時間をミリ秒単位で指定する。

sleep.js

WScript.Sleep(WScript.Arguments(0)*1000)

実行時には、スリープする秒数をsleep.js のコマンドライン引数に指定する。

C:\> cscript.exe sleep.js 60

WScript.Version

Windows Script Host のバージョンを返す。このプロパティは読み取り専用である。

WScript.Echo(WScript.Version);

単一行コメント

JScript において「//」から行末まではコメントとなる。これを単一行コメントという。

// comment

複数行コメント

JScript において「/*」から「*/」まではコメントとなる。間に改行が入ってもよい。これを複数行コメントという。

/*
  comment
*/

substring()

JScriptで文字列の切り出しを行うには、substring() メソッドを使う。

第1引数には、切り出す最初の位置を0から始まる番号で指定する。

第2引数には、切り出す最後の文字の次の位置を0から始まる番号で指定する。

str = "string";
sub = str.substring(0, 3);

文字が正しくありません

JScriptを実行したときに「文字が正しくありません」とエラーメッセージが表示されることがある。

インタラクティブ・モード(wscript)では次のエラーダイアログが表示される。

文字が正しくありません
Figure 3. 文字が正しくありません
Windows Script Host
スクリプト: C:\Users\tsuka\ドキュメント\example.js
行: 1
文字: 1
エラー: 文字が正しくありません。
コード: 800A03F6
ソース: Microsoft JScript コンパイルエラー

バッチ・モード(cscript)では次のエラーメッセージが表示される。

C:\Users\tsuka\ドキュメント\example.js(1, 1) Microsoft JScript コンパイル エラー: 文字が正しくありません。

これは、スクリプトファイルをUTF-8で作成していることが原因である。Windows Script Host (WSH) はUTF-8をサポートしていない。スクリプトファイルはANSIまたはUnicodeで作成する必要がある。

JScript と JavaScript の違い

JScriptはMicrosoft WindowsおよびInternet Explorer上で動作するが、IE以外のウェブブラウザ上では動作できない。

JavaScriptはIE以外の全てのウェブブラウザ上で動作するが、Microsoft Windows上では動作できない。

ウェブブラウザとスクリプト
ウェブブラウザ スクリプト
Chrome JavaScript
Edge JavaScript
Firefox JavaScript
Internet Explorer JScript
Safari JavaScript