WSH を使用して、アプリケーションを起動できます。次のスクリプトは、それらの機能の使用例を示しています。
ローカル サーバー アプリケーションを作成する
Microsoft Word などいくつかのアプリケーションは、プログラムからアクセス可能なオブジェクトを公開しています。次のスクリプトは、Word のスペル チェック機能の使用例を示しています。
// JScript.
var Word, Doc, Uncorrected, Corrected;
var wdDialogToolsSpellingAndGrammar = 828;
var wdDoNotSaveChanges = 0;
Uncorrected = "Helllo world!";
Word = new ActiveXObject("Word.Application");
Doc = Word.Documents.Add();
Word.Selection.Text = Uncorrected;
Word.Dialogs(wdDialogToolsSpellingAndGrammar).Show();
if (Word.Selection.Text.length != 1)
Corrected = Word.Selection.Text;
else
Corrected = Uncorrected;
Doc.Close(wdDoNotSaveChanges);
Word.Quit();
' VBScript.
Dim Word, Doc, Uncorrected, Corrected
Const wdDialogToolsSpellingAndGrammar = 828
Const wdDoNotSaveChanges = 0
Uncorrected = "Helllo world!"
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Add
Word.Selection.Text = Uncorrected
Word.Dialogs(wdDialogToolsSpellingAndGrammar).Show
If Len(Word.Selection.Text) <> 1 Then
Corrected = Word.Selection.Text
Else
Corrected = Uncorrected
End If
Doc.Close wdDoNotSaveChanges
Word.Quit
Shell.Exec コマンドを使ってプログラムを生成する
Shell.Exec コマンドは Shell.Run メソッドにはない追加機能を備えています。たとえば、次のような機能があります。
- 強化された環境変数の引き渡し機能
- 実行可能ファイルの標準ストリームにアクセスする機能
次の VBScript コードは、標準ストリームと Shell.Exec コマンドを使って、指定した正規表現に一致するファイル名のファイルが存在するかどうかディスク内を検索する例を示しています。
まず、次のスクリプトで、現在のディレクトリおよびそのサブディレクトリにあるすべてのファイルの絶対パスを StdOut に出力します。
' VBScript.
' MYDIR.VBS
Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
DoDir FSO.GetFolder(".")
Sub DoDir(Folder)
On Error Resume Next
Dim File, SubFolder
For Each File In Folder.Files
WScript.StdOut.WriteLine File.Path
Next
For Each SubFolder in Folder.SubFolders
DoDir SubFolder
Next
End Sub
次に、以下のスクリプトにより、StdIn 内でパターンに一致する行を検索し、それらをすべて StdOut に出力します。
' MyGrep.VBS
Option Explicit
Dim RE, Line
If WScript.Arguments.Count = 0 Then WScript.Quit
Set RE = New RegExp
RE.IgnoreCase = True
RE.Pattern = WScript.Arguments(0)
While Not WScript.StdIn.AtEndOfStream
Line = WScript.StdIn.ReadLine
If RE.Test(Line) Then WScript.StdOut.WriteLine Line
WEnd
この 2 つのスクリプトを組み合わせると目的の処理を実行できます。1 つのプログラムではディレクトリ ツリー内のすべてのファイルを一覧表示し、もう 1 つのプログラムでは指定した正規表現に一致する行を検索します。ここで第 3 のプログラムを用意し、この 2 つの処理を両方とも実行させます。このプログラムは、オペレーティング システムを使ってプログラム間で情報をパイプし、さらにその結果を自身の StdOut にパイプします。
// MyWhere.JS
if (WScript.Arguments.Count() == 0)
WScript.Quit();
var Pattern = WScript.Arguments(0);
var Shell = new ActiveXObject("WScript.Shell");
var Pipe = Shell.Exec("%comspec% /c \"cscript //nologo mydir.vbs | cscript //nologo mygrep.vbs " + Pattern + "\"");
while(!Pipe.StdOut.AtEndOfStream)
WScript.StdOut.WriteLine(Pipe.StdOut.ReadLine());