VBSではVB、VBAのように構造体を使用できないのです。これがないとかなりキツイ。。 その代わり?クラスを以下のように使用して構造体以上の動作が可能です。
<補足>
コンストラクタとは、オブジェクトが生成された時(Set Sg = New clsSys)に自動で呼び出されます。
デストラクタとは、オブジェクトを破棄する時(Set Sg = Nothing)に自動で呼び出されます。
デストラクタとは、オブジェクトを破棄する時(Set Sg = Nothing)に自動で呼び出されます。
では、実装の仕方について
'*** 最初にクラス定義 ***
CLASS clsSys
Private Fso 'オブジェクト:ファイルシステム
Private Shell 'オブジェクト:SHELL
'コンストラクタ
Private Sub Class_Initialize()
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("Wscript.Shell")
Wscript.Echo "コンストラクタ起動"
End Sub
'デストラクタ
Private Sub Class_Terminate()
Set Fso = Nothing
Set Shell = Nothing
Wscript.Echo "デストラクタ起動"
End Sub
'コマンド実行処理
Public Function Exec(strcmdline)
On Error Resume Next
Wscript.Echo "[cmdline] " & strcmdline
Set oExec = Shell.Exec ( strcmdline )
IF Err.Number <> 0 Then
Exec = Err.Number
Exit Function
End If
Do While (oExec.Status=0)
WScript.Sleep 100
Loop
'リターンコード
Exec = oExec.ExitCode
On Error Goto 0
End Function
END CLASS
'*** ここからが処理 ***
Dim clsSeigyo
'クラス生成(コンストラクタが実行されます)
Set clsSeigyo = New clsSys
Call main()
'クラス初期化(デストラクタが実行されます)
Set clsSeigyo = Nothing
Wscript.Quit(intRet)
'** メイン処理 **
Sub main()
Dim arrycmd
Dim i
arrycmd = array( "Cmd.exe /C Echo OK?","Cmd.exe /C Echo NG?")
For i = 0 To Ubound(arrycmd)
ec clsSeigyo.Exec(arrycmd(i))
Next
End Sub
'** 実行結果 **
コンストラクタ起動
[cmdline] Cmd.exe /C Echo OK?
'[2008/12/06 13:49:07]0
[cmdline] Cmd.exe /C Echo NG?
'[2008/12/06 13:49:07]0
デストラクタ起動
'** 参考に **
クラス内の呼び出し方について
CLASS clsSys
Private Fso 'オブジェクト:ファイルシステム
Private Shell 'オブジェクト:SHELL
'コンストラクタ
Private Sub Class_Initialize()
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("Wscript.Shell")
Wscript.Echo "コンストラクタ起動"
End Sub
'デストラクタ
Private Sub Class_Terminate()
Set Fso = Nothing
Set Shell = Nothing
Wscript.Echo "デストラクタ起動"
End Sub
'コマンド実行処理
Public Function Exec(strcmdline)
On Error Resume Next
Wscript.Echo "[cmdline] " & strcmdline
Set oExec = Shell.Exec ( strcmdline )
IF Err.Number <> 0 Then
Exec = Err.Number
Exit Function
End If
Do While (oExec.Status=0)
WScript.Sleep 100
Loop
'リターンコード
Exec = oExec.ExitCode
On Error Goto 0
End Function
END CLASS
'*** ここからが処理 ***
Dim clsSeigyo
'クラス生成(コンストラクタが実行されます)
Set clsSeigyo = New clsSys
Call main()
'クラス初期化(デストラクタが実行されます)
Set clsSeigyo = Nothing
Wscript.Quit(intRet)
'** メイン処理 **
Sub main()
Dim arrycmd
Dim i
arrycmd = array( "Cmd.exe /C Echo OK?","Cmd.exe /C Echo NG?")
For i = 0 To Ubound(arrycmd)
ec clsSeigyo.Exec(arrycmd(i))
Next
End Sub
'** 実行結果 **
コンストラクタ起動
[cmdline] Cmd.exe /C Echo OK?
'[2008/12/06 13:49:07]0
[cmdline] Cmd.exe /C Echo NG?
'[2008/12/06 13:49:07]0
デストラクタ起動
'** 参考に **
クラス内の呼び出し方について