1

您知道一个 vbs 文件如何在不执行的情况下验证另一个 vbs 文件的正确性吗?

“验证正确性”是指可以编译第二个文件而不会出错。

4

1 回答 1

1
  1. .ReadAll() 要检查的文件
  2. 如有必要,删除“选项显式”,添加“选项显式:WScript.Quit 0”
  3. On Error Resume Next : Execute[Global] (modified) source : 处理错误

更新:

正如 intersum 指出的那样,我没有意识到WScript.Quit将终止执行(全局)它的脚本。所以无法避免使用外壳。

概念证明脚本:

Option Explicit

Dim goFS   : Set goFS = CreateObject("Scripting.FileSystemObject")
Dim goWS   : Set goWS = CreateObject("WScript.Shell")
Dim aFiles : aFiles   = Array("good.vbs", "bad.vbs")
Dim sFile
For Each sFile In aFiles
    WScript.Echo sFile, "==>", checkSyntax(sFile)
Next

Function checkSyntax(sFile)
  Dim sCode : sCode = goFS.OpenTextFile(sFile).ReadAll()
  WScript.StdOut.Write "  A " & sCode
  sCode = "Option Explicit : WScript.Quit 0 : " & sCode
  goFS.CreateTextFile("sctmp.vbs", True).WriteLine sCode
  WScript.StdOut.Write "  B " & goFS.OpenTextFile("sctmp.vbs").ReadAll()
  Dim oExec : Set oExec = goWS.Exec("cscript sctmp.vbs")
  Dim sOtp  : sOtp      = oExec.Stderr.ReadAll()
  If "" = sOtp Then
     checkSyntax = "ok"
  Else
     checkSyntax = sOtp
  End If
End Function

输出:

cscript sc.vbs
  A WScript.Echo "good"
  B Option Explicit : WScript.Quit 0 : WScript.Echo "good"

good.vbs ==> ok
  A WScript.Echo "bad" : SomeSub(1, 2, 3)
  B Option Explicit : WScript.Quit 0 : WScript.Echo "bad" : SomeSub(1, 2, 3)

bad.vbs ==> M:\lib\kurs0705\xpl\sctmp.vbs(1, 73) Microsoft VBScript compilation error: Cannot use parentheses
when calling a Sub

更新二:

从中可以看出:

type bad.vbs
WScript.Echo "bad" : SomeSub 1, 2, 3

cscript bad.vbs
bad
M:\lib\kurs0705\xpl\bad.vbs(1, 22) Microsoft VBScript runtime error: Type mismatch: 'SomeSub'

大部分脚本执行可能会出现运行时错误(输出“bad”)。要处理此类错误,您必须

  1. 设计和实施强大的程序
  2. 做密集测试
  3. 实现 rutime 错误处理

这些要求在 VBScript 中都不是“容易的”。

于 2012-11-16T17:25:24.473 回答