VBScript验证代码正确性而不执行它

时间:2012-11-16 14:35:24

标签: vbscript execute correctness

您是否知道一个vbs文件如何验证另一个vbs文件的正确性但不执行它?

通过“验证正确性”我的意思是可以编译第二个文件而不会出错。

1 个答案:

答案 0 :(得分:1)

  1. .ReadAll()要检查的文件
  2. 如有必要,请删除“Option Explicit”,前缀“Option Explicit:WScript.Quit 0”
  3. On Error Resume Next:执行[Global](已修改)source:Handle Error
  4. <强>更新

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

    概念证明脚本:

    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
    

    更新II:

    从以下可以看出:

    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错误处理
    4. 这些要求在VBScript中都不容易。