wshスクリプト作成用のテンプレートを作った

ダウンロード

http://kasei-san.sakura.ne.jp/wsh/wshScriptTemp.js
ライセンスは、NYSLでお願いします。(要はフリーです)

これは何?

wshって、何かやろうとするたびにいろんなActiveXオブジェクトを呼び出さなきゃいけなかったりで、めんどい。
毎回リファレンスを探すのも大変なので、つかいそうなあたりをまとめて、テンプレートにしました。
これをベースにwshスクリプトを書けば、いつもよりは楽ができるはずです。


よくわからんで書いてる所も多いので、ツッコミも大歓迎です。

注意点

  • windowsXP SP2 Windows Script Host Version 5.6で動作確認しています。
  • XMLは、Web.getXML()。htmlは、Web.getText()、Web.getDom()。バイナリは、web.getResponseBody()を使って下さい。
    • Web.getXML()でhtmlファイルを取得しようとしても何も取れません。
    • Web.getText()、Web.getDom()で、xmlファイルを取得しようとすると、文字コード変換が上手くいかず文字化けします。

使い方

ソースの464行目にあるコメント以降にソースを書いてください。

//-----------------------------------------------------------------------------
// このへんにソースを書く
//-----------------------------------------------------------------------------

仕様一覧

連想配列
配列名 要素名 説明
File writeResponseBody( responseBody, path ) pathにresponseBodyを書き込む。
webから取得したバイナリデータをファイルに書き込む際に使用
File read( path ) ファイルからテキストデータを取得
File write( path, str, overwrite ) テキストファイルに書き込み( overwrite:true で上書き )
File append( path, str ) テキストファイルに追記( 存在しない場合、新規作成 )
File pwd() カレントディレクトリ取得
File getFiles( path ) ファイル一覧を配列で取得
File getDirs( path ) サブディレクトリ一覧を配列で取得
File isFile( path ) ファイルの存在確認
File isDir( path ) ディレクトリの存在確認
File mkdir( path ) ディレクトリ作成
File delFile( path ) ファイル削除
File delDir( path ) ディレクトリ削除
Web getResponseBody( url, args ) webからResponseBodyを取得。
URLに渡す引数はargsに連想配列で入れてもOK
ResponseBodyはFile.writeResponseBody()で、ファイルに書き込める
Web getText( url, args ) webからテキストデータを取得。
URLに渡す引数はargsに連想配列で入れてもOK
Web getXML( url, args ) webからXMLデータを取得。
URLに渡す引数はargsに連想配列で入れてもOK
Web getDom( url, args ) webからテキストを取得して、DOMオブジェクトに変換。
URLに渡す引数はargsに連想配列で入れてもOK
Web postResponseBody( url, args ) データをpostして、ResponseBodyを取得。
postする情報は、argsに連想配列で入れる
ResponseBodyはFile.writeResponseBody()で、ファイルに書き込める
Web postText( url, args ) データをpostして、テキストデータを取得。
postする情報は、argsに連想配列で入れる
Web postXML( url, args ) データをpostして、XMLデータを取得。
postする情報は、argsに連想配列で入れる
Web postDom( url, args ) データをpostして、取得したテキストをDOMオブジェクトに変換。
postする情報は、argsに連想配列で入れる
Arg unNamed 配列要素。名前なし引数を格納
Arg getNamed(name) 名前付き引数を取得
Arg isNamed(name) 名前付き引数の存在確認
関数
関数名 説明
sleep(ms) スリープ(ms)
print(str) 文字列をコマンドラインに出力
dump(obj) 対象のオブジェクトをfor in して中身をコマンドライン出力
domDump(obj) 対象のDOMオブジェクトの中身をコマンドライン出力
readLine() コマンドラインを入力待ちにする。戻り値で入力値を取得
confirm(str) コマンドラインで[Y/N]の入力待ちにする。引数は入力待ち時に表示するテキスト。
戻り値はtrue:Y。false:N

UnitTest


http://kasei-san.sakura.ne.jp/wsh/lib/UnitTest.js


殆どのメソッドを使っているので、サンプルコード代わりになると思います。


動作手順

  1. UnitTest.js、wshScriptTemp.jsと同じディレクトリに、ディレクトリ「lib」を作成して格納。
  2. wshScriptTemp.jsの464行目のコメントアウトを外す。
  3. wshScriptTemp.jsを実行
//-----------------------------------------------------------------------------
// このへんにソースを書く
//-----------------------------------------------------------------------------
//UnitTest(); // ← コメントアウト削除でUnitTest開始

その他

ライブラリ取得機能

wshScriptTemp.jsと同じディレクトリに、ディレクトリ「lib」があると、その中のjsファイルを全てevalします。

TODO(気が向いた順に実装)

  • $とかDOM系の機能追加
  • multipart/form-dataでバイナリデータのPOST
  • (必要になったら)文字コードの変換処理を追加
  • 少し遊んでこなれてきたらCodeReposに上げたい
  • TumblrAPIで遊ぶライブラリを作る
  • ファイル、ディレクトリのコピー
  • wscriptからの実行にも対応

変更履歴

2008/02/15
  • File.write() 追加
  • File.append() 追加
  • Web.getDom() 追加
  • domDump() 追加
  • readLine() 追加
  • confirm() 追加
  • ライブラリ取得機能追加
    • UnitTest.js 追加
2008/02/16
  • Web.get***の引数が正しく渡されていなかったのを修正。
2008/05/03
  • TumblrAPIで遊ぶためのlibを追加。

経緯

wshスクリプトで何かしたいときに一々調べるのが面倒なので作成。
wshスクリプト作成の敷居を下げれたら良いなと。

参考リンク

参考にさせていただきました。感謝!
JScript シェル - へたっぴ日記
[WSH入門]バッチファイルからWSHへ インデックス


そんな感じ。