VBScript。DOSバッチ内でOK又はNGを判別する

いまだにDOSバッチを組んでいるのサ、ヤレヤレだぜ


DOSバッチ内で直前の一連のコマンドの実行結果を、例えば正常終了ならば

ECHO OK > FLAG_OK.FLG

のようにテキストファイルにしているので(後でのぞけるように)
その結果のOK又はNGで後続の処理を分岐させたい。

というのが必要になったので、CheckOKNG.vbsとして作成してみた。

Option Explicit

'定数の宣言
Const ForReading = 1		'読み込み
Const ForWriting = 2		'書きこみ(上書きモード)
Const ForAppending = 8		'書きこみ(追記モード)
Const DataASCII = False		'ASCII
Const DataUnicode = True		'Unicode
Const DataUseDefault = False	'システム規定値

Dim strString
strString = "OK"		'戻り値(の元)

Dim objParm
Set objParm = Wscript.Arguments	'引数パラメタ情報の保存

If objParm.Count < 1 Then
   WScript.echo "引数パラメタが正しくありません"
ElseIf objParm.Count > 1 Then
   WScript.echo "引数パラメタが多過ぎです"
Else
   Call prcExecMain
End If

Set objParm = Nothing

If strString = "OK" Then
   Wscript.Quit(0)	'OK正常
Else
   Wscript.Quit(1)	'NG何か正常でない
End If

'=============================================================
'テキストファイルの読み込みと判定
'=============================================================
Sub prcExecMain()

   'On Error Resume Next

   Dim objFileSys
   Dim objInFile
   Dim intSep
   Dim strScriptPath
   Dim strFileName
   Dim strFilePath
   Dim strRecord

   strFileName = objParm(0)	'ファイル名※が渡されている

   'このVBSプログラムが保存されているフォルダ=パス情報
   strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"")

   Set objFileSys = CreateObject("Scripting.FileSystemObject")

   'ファイル名※を読み込むフルパスを組み立てる
   strFilePath = objFileSys.BuildPath(strScriptPath,strFileName)

   Set objInFile = objFileSys.OpenTextFile(strFilePath,ForReading,DataASCII)

   If Err.Number=0 Then
      Do Until objInFile.AtEndOfStream = true
         strRecord = objInFile.ReadLine
         strString = Mid(strRecord, 1, 2)	'先頭2文字を切り出す
	Exit Do		'読み込むレコードは1件のみ
      Loop
      objInFile.Close
   Else
      Wscript.Echo strScriptPath & "にファイル" & strFileName & "がありません"
      strString = "NO"
   end if

   Set objFileSys = Nothing
   Set objInFile = Nothing

End Sub


上記のVBScriptを使っているDOSバッチのサンプル。

ECHO OFF

CheckOKNG.vbs "FLAG_OK.FLG"

ECHO ERRORLEVEL=%errorlevel%
IF ERRORLEVEL 1 GOTO :TAG_ERROR

:TAG_NORMAL
echo "OKだよ"

goto :TAG_EXIT

:TAG_ERROR
echo "NGだよ"


:TAG_EXIT

echo %ERRORLEVEL%
pause

(参考)2.5 テキストファイルの行単位の読み込み
http://www.happy2-island.com/vbs/cafe02/capter00205.shtml