VBScript で書かれたスクリプトを JScript で書き直すついでに、WSH について
前回記事で VBScript で書いたスクリプトを、JScript で書き直してみる。
VBScript も JScript も、Windows Scripting Host (WSH) と呼ばれる、Windows 上でのスクリプトの実行環境で実行できる言語だ。VBScript は Visual Basic 上がりのスクリプト言語で、VBA とか書いてた人は使いやすいと思う。JScript は JavaScript の方言チックな感じで、基本文法は JavaScript そのものといえる。現在から見ると、使い勝手や機能のイメージはコマンドプロンプト以上、PowerShell 未満、といった感じだろうか。Windows 環境では、VBScript は .vbs
、JScript は .js
で保存しておくと、いずれもダブルクリックで実行してよしなにしてくれる。
自分は VBA より JavaScript や Java の方が慣れているので、JScript で書こうとすることが多い。通常使っている範囲では、VBScript との機能的な差はほとんどなく、その時に書きたい方で書けばいい気がしている。
さて、前回の記事で書いた、ファイル読み書きのスクリプトを JScript で書き直すとこんな感じ。
var fso = new ActiveXObject("Scripting.FileSystemObject");
// 読み込みファイルの指定
var inputFile = fso.OpenTextFile("inputText.txt", 1, false, 0);
// 書き出しファイルの指定
var outputFile = fso.OpenTextFile("outputText.txt", 2, true);
// 読み込みファイルから1行ずつ読み込み、書き出しファイルに書き出すのを最終行まで繰り返す
while(!inputFile.AtEndOfStream) {
var lineStr = inputFile.ReadLine();
outputFile.WriteLine(lineStr);
}
// バッファを Flush してファイルを閉じる
inputFile.Close();
outputFile.Close();
主な違いは以下のとおり。
処理 | VBScript | JScript |
---|---|---|
変数の宣言と初期値設定 | Dim fso: Set fso = ... |
var fso = ... |
FileSystemObject の生成 | WScript.CreateObject() |
new ActiveXObject() |
行の終わり | (セミコロンなし) | セミコロンで閉じる |
while 文 | Do Until inputFile.AtEndOfStream など |
while(!inputFile.AtEndofStream) |
引数なしのメソッド | inputFile.ReadLine |
inputFile.ReadLine() |
引数が1つのメソッド | outputFile.WriteLine lineStr |
outputFile.WriteLine(lineStr) |
オブジェクト生成が CreateObject
と ActiveXObject
とで異なる。VBScript のコードをコピペして JScript に移植しようとしてよく間違えるところ。
Do Until
と比べて、while
文は条件を反転させる点に注意 (個人的に while 文が苦手でいつも間違えてる。VB 系はループの書き方多くて大変や…)。
メソッドの引数がない場合はカッコが不要、という VB 系の特徴も、Java 系の JScript だと必ずカッコが必要。
変数の宣言と初期値指定が1行で自然にできるというところは JScript の方が気持ち良い。