Windows 脚本宿主  

驱动应用程序

使用 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

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

请参阅

WSH 示例 | Exec 方法 | Run 方法