使用 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.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
将这两个脚本放在一起便可达成我们的目的 一个脚本列出目录树中的所有文件,另一个脚本查找与常规表达式匹配的行。现在我们编写第三个程序来完成两件事:它使用操作系统将一个程序导入另一个程序,然后将所产生的结果导入自己的 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());