您是否知道一个vbs文件如何验证另一个vbs文件的正确性但不执行它?
通过“验证正确性”我的意思是可以编译第二个文件而不会出错。
答案 0 :(得分:1)
<强>更新强>
正如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”)。要处理此类错误,您必须
这些要求在VBScript中都不容易。