使用 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());