相当な時代遅れ?

どういうわけか最近まわりでVBSが流行ってきている.そうとうな遅れ具合ですな.けどどうもVBは好きになれないので,こっそりJScriptをいじってみてるわけです.しっかし,ここまでマイナーというか,相手にされてない言語も珍しいですね.もちろんAJAX方面でJavaScipt自体は隆盛を誇っていますけど,WSHの言語としてのJScriptは,もののみごとにマイナー路線まっしぐら.あまりのドキュメントの少なさにびっくりです(せっかくJScript.NETなんてのもあるのにもったない).

ということで,ドキュメントがなければ自作するしかありません.

Hello World

//hello.js
WScript.echo("Hello World");

お約束の``Hello World''.

WScriptはWSHの提供するオブジェクトのルートオブジェクト.インスタンスを作らなくてもメソッドが使えます(クラスメソッドを提供している).WScript.echoでWscriptのechoメソッドを引数``Hello World''で呼び出しているだけです.
このファイルをダブルクリックで動かせば,窓が開いてその中に``Hello World''とでてきます.これはコマンドライン

wscript hello.js

としても同じです.さらに単に

hello.js

とだけしても同じです*1.一方,コマンドライン

cscript hello.js 

とすると,コマンドライン

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Hello World

とでてきます.

デフォルトではwscipt.exeに関連付けられていて,GUIで動くようになっています.あえてコマンドラインにしたい場合は明示的にcscript.exeを指定すればCUIで動くのです.

コマンドライン引数(「名前なし」,「名前つき」)

最初何のことか全然理解できませんでした.わざわざ「名前なし」「名前つき」なんて区別されてるわりには,何が「名前なし」「名前つき」の差なのかがさっぱり.

結論としては

  • 普通の引数は「名前なし」
  • コマンドラインオプションに相当する引数は「名前つき」

ということです.他の言語だと,引数は引数,オプション用の文字列でもそれは引数であり,プログラム側で解析するものですが,WSHはそうではなくって,「オプション用に引数を書けば,システム側で整理してくれる」ということです.MSらしいといえばらしいある種の押し付けがましさはありますが,他の言語でも既存のライブラリを使うことと大きな違いはない(ライブラリの選択の自由の差はありますが)かもしれません.

*1:拡張子を省略してもよいのですが,Windowsの種類によっていろいろあるようなので省略しない方がよい感じです.