Windows Scripting Host 1

First Step

はじめのいっぽ

まず次のようなテキストファイルを作ります。
    scripts/start.js
    ---------------------
    WScript.Echo("ほえ");
拡張子は、JavaScriptなら.js、VBScriptなら.vbsとします。 ここではJavaSCriptを使ったので、start.jsというファイル名にしました。
もしVBScriptならば、VB(A)の経験者なら分かるとおり、
    WScript.Echo "ほえ"
とします。
このスクリプトを実行するには2つの方法があります。

Echo メソッドは文字列を引数としますが、 文字列でない場合は toSting メソッドを適用します(12/25/01)。
scripts/echo.js
------------------------------------------------------------
var v = new vector(0, 1, 2);
WScript.Echo(v);        //(0, 1, 2)

//vectorオブジェクト
function vector(x, y, z) {
    this.x = x;
    this.y = y;
    this.z = z;
    this.toString = vtostring;  //toStringメソッド
}

function vtostring() {
    return "(" + this.x + ", " + this.y + ", " + this.z + ")";
}
ただ、特定のオブジェクトはその限りではないようです(12/28/01)。
scripts/echo.js
------------------------------------------------------------
//Numberオブジェクト
var a = 1e-7
WScript.Echo(a);                            //0.0000001
WScript.Echo(a.toString());                 //1e-7

//VBのDate型オブジェクト
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var WShell = WScript.CreateObject("Wscript.Shell");
var dsktop = fs.GetFolder(WShell.SpecialFolders("Desktop"));
WScript.Echo(dsktop.DateLastModified);      //2000/12/29 18:41:10
WScript.Echo("" + dsktop.DateLastModified); //Fri Dec 29 18:41:10 UTC+0900 2000

//Booleanオブジェクト
var b = true;
WScript.Echo(b);                            //-1
WScript.Echo(b.toString());                 //true
CScript のオプション

上のコマンドを実行すると、最初に
Microsoft (R) Windows Scripting Host Version 5.0 for Windows
Copyright (C) Microsoft Corporation 1996-1997. All rights reserved.
などと表示されると思いますが、これを避けるためには、
    >cscript //nologo filename
とします。

CScript の引数

CScriptでは次のように引数をとることができます (本当はWScriptでも同じように引数をとれます)。
    >cscript //nologo mtable.js 6 7 > mtable.htm
ここでは、6 と 7 が引数になっています。 リダイレクトで標準出力がmtable.htmに書き出されます。
scripts/mtable.js
------------------------------------------------------------
//かけ算の表を作るプログラム
var r, c, i, j;
var objArgs = WScript.Arguments;

//引数の処理(かなり甘い)
if(objArgs.length != 2)     //引数の数が2でないなら
    QuitForError();
if((r = parseInt(objArgs(0))) <= 0)
    QuitForError();
if((c = parseInt(objArgs(1))) <= 0)
    QuitForError();

//表を作る
WScript.Echo("<HTML>\n<BODY STYLE=\"text-align:center;\">");
WScript.Echo("<TABLE BORDER>");
for(i = 1; i <= r; i++) {
    WScript.Echo("<TR>");
    for(j = 1; j <= c; j++)
        WScript.Echo("<TD>" + i * j + "</TD>");
    WScript.Echo("</TR>");
}
WScript.Echo("</TABLE>\n</BODY>\n</HTML>");

function QuitForError() {
    WScript.Echo(
        "usage : cscript //nologo mtable.js nrows ncolumns");
    WScript.Quit();     //プログラムを終了する
}
このプログラムを実行すると、次のようなHTMLファイルが生成されます。

mtable.htm

プログラムは、1番目の引数がrに入り、2番目の引数がcに入って、 r行×c列のかけ算の表を作ります。

WScript.ArgumentsArgumentsオブジェクトを返します。
objArgs.lengthで引数の個数を返します。 上の例では2を返します。
objArgs(0)で最初の引数を返します。 objArgs(1)で2番目の引数を返します。

このようにWSHをawkやPerlの代わりに使うことができます。 いままでPerlで見栄えのよくないプログラムをやむを得ず作っていた人(って私か) も、これで少しはましなプログラムを組むことができるでしょう。
もっとも、本当のWSHの価値はアプリケーションを直接制御できるところにあります。 第6回からはそちらについて紹介したいと思います。


first, next, noframe, exit
Written 5/28/98