1

あるvbsファイルが別のvbsファイルの正当性を、実行せずに検証する方法を知っていますか?

「正しさを確認する」とは、この2番目のファイルをエラーなしでコンパイルできることを意味します。

4

1 に答える 1

1
  1. .ReadAll()チェックするファイル
  2. 必要に応じて「OptionExplicit」を削除し、「Option Explicit:WScript.Quit0」を先頭に追加します
  3. エラー時再開次:実行[グローバル](変更)ソース:エラーの処理

アップデート:

インターサムが指摘したように、私は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

アップデート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エラー処理を実装する

これらの要件はいずれも、VBScriptでは「簡単」ではありません。

于 2012-11-16T17:25:24.473 に答える