With WSH you can start applications. The following scripts demonstrate some of these capabilities.
Creating a Local Server Application
Some applications, such as Microsoft Word, expose objects which can be accessed programmatically. The following script uses Word's spell checker.
Copy Code | |
---|---|
// 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 |
Spawning Programs with Shell.Exec Command
The Shell.Exec command provides additional capability beyond the Shell.Run method. These abilities include:
-
Improved environment variable passing
-
Ability to access the standard streams of the executable
The following VBScript sample demonstrates how to use standard streams and the Shell.Exec command to search a disk for a file name that matches a regular expression.
First, here's a small script that dumps to StdOut the full path of every file in the current directory and below:
Copy Code | |
---|---|
' 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 |
Next, this script searches StdIn for a pattern and dumps all lines that match that pattern to StdOut.
Copy Code | |
---|---|
' 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 |
Together these two scripts do what we want — one lists all files in a directory tree and one finds lines that match a regular expression. Now we write a third program which does two things: it uses the operating system to pipe one program into the other, and it then pipes the result of that to its own StdOut:
Copy Code | |
---|---|
// 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()); |
See Also
Reference
Exec Method (Windows Script Host)Run Method (Windows Script Host)