JScript シェル

via http://moz-addon.g.hatena.ne.jp/ZIGOROu/20071122/1195761296 (など)
気のせいか JScript シェルブームでしょうか。自分が使ってるのを晒してみよう。

基本は入力文字列を eval して、戻りがあれば表示する。コマンドプロンプトから実行すればなぜか↑↓キーで履歴が使える。

D:\scripts\js\ijscript>cscript //nologo ijsc.js
ijsc> var o = {n: 1, s: "a"}
ijsc> o
[object Object]
ijsc> o.n
1
ijsc> p
TypeError: 'p' は宣言されていません。

function は必要になった時にちょこちょこ追加している。
よくある表示系。

ijsc> print(o.s)
a
ijsc> dump(o)
n: 1
s: a

time() は処理時間の計測。Firebug のまね。sleep() はそのまま。

ijsc> time(1); sleep(1234); time(1)
1234ms

run() はプログラム実行。まず使わない。

ijsc> run('notepad')

create() で COM いじり。単に new ActiveXObject() とか入力するのがめんどいだけ。大文字が苦手。

ijsc> var excel = create('excel.sheet', {application: {visible: 1}})
ijsc> excel.activesheet.cells(1,1).value = 'foo'
foo
ijsc> excel.saveas('zzz')
True
ijsc> excel.application.quit()

files() でファイル名取得。正規表現でフィルタ。

ijsc> files('libs').join('\n')
D:\scripts\js\ijscript\libs\isbn.js
D:\scripts\js\ijscript\libs\zzz.js

ijsc> files('libs', /zzz/).join('\n')
D:\scripts\js\ijscript\libs\zzz.js

load() でライブラリ読み込み。

ijsc> load('libs/isbn.js')
ijsc> ISBN
[object Object]

ディレクトリ指定でそこにある js ファイルすべて。

ijsc> load('libs')
ijsc> Zzz
[object Object]

Web からも読み込みできる。ライブラリを試用するときとかに使う。

ijsc> "str".toSource()
TypeError: オブジェクトでサポートされていないプロパティまたはメソッドです。
ijsc> load('http://coderepos.org/share/browser/lang/javascript/Object.toSource/lib/Object/toSource.js?format=raw')
ijsc> "str".toSource()
(new String("str"))

proxy() でプロキシ指定。うちの会社からは串を通さないと出れません…。監視してるらしいよ。こわいね。

ijsc> proxy({host: 'proxy.example.com:8080', userid: 'foo', password: 'bar'})

quit() で終了するけど、めんどいので Ctrl-C で。

ijsc> quit()

引数で読み込むファイル名やディレクトリ、URL を指定できる。ユニットテストするときによく使ってる。
−q はシェルモードにならずに終了。

D:\scripts\js\ijscript>cscript //nologo ijsc.js -q libs libs\tests\lib\test libs\tests\tests.js
OK - [f, ]
...
OK - [eq, 978-1-59059-727-9, 978-1-59059-727-9]
OK: 37, NG: 0, 100
D:\scripts\js\ijscript>

−e でワンライナー。SAPI.SpVoice すごいね(ネタ元 ZIGOROu さん)

D:\scripts\js\ijscript>cscript //nologo ijsc.js -e "new ActiveXObject('SAPI.SpVoice').Speak('JScript++')"

ソースは読まないほうがいいです。

続きを読む