[WScript.Shell] Run 과 Exec
- [Method] Run, Exec
Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
intError = WshShell.Run (strCommand [, intWindowStyle] [, bWaitOnReturn])
WshShell.Run "%windir%\notepad" & WScript.ScriptFullName
' cf, 반환값 없이 단독 실행시에는 괄호로 묶지 않는다.
intError = WshShell.Run("notepad " & WScript.ScriptFullName, 1, True)
intError = WshShell.Run ("setup.exe", 1, true)
-----------------------------------------------------------------------------------
Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
Dim oExec : Set oExec = WshShell.Exec("calc")
Do While oExec.Status = 0
WScript.Sleep 100
Loop
WScript.Echo oExec.Status
' Status Return Values
' 0 : The job is still running.
' 1 : The job has completed.
-----------------------------------------------------------------------------------
' Run 과 Exec 의 가장 큰 차이
'=> Run 은 실행만 하지만, Exec는 실행과 동시에 객체(object)를 생성한다.
' 따라서 Exec를 통한 실행은 생성된 객체를 이용한 후속 작업이 용이하다.
Set FSO = Wscript.CreateObject("Scripting.FileSystemObject")
Set Shell = Wscript.CreateObject("Wscript.Shell")
TempName = FSO.GetTempName
TempFile = TempName
Shell.Run "cmd /c ping -n 3 -w 1000 157.59.0.1 >" & TempFile, 0, True
Set TextFile = FSO.OpenTextFile(TempFile, 1)
Do While TextFile.AtEndOfStream <> True
strText = TextFile.ReadLine
If Instr(strText, "Reply") > 0 Then
Wscript.Echo "Reply received."
Exit Do
End If
Loop
TextFile.Close
FSO.DeleteFile(TempFile)
' 아래는 동일한 결과는 가지는 Exec 를 통한 실행이다.
' 실행을 통해 반환되는 StdOut 에 접근하기위해 임시파일 만들고 할 필요가 없다.
Dim Shell : Set Shell = WScript.CreateObject("WScript.Shell")
Dim ExecObject : Set ExecObject = Shell.Exec ("cmd /c ping -n 3 -w 1000 157.59.0.1")
Do While Not ExecObject.StdOut.AtEndOfStream
strText = ExecObject.StdOut.ReadLine
Loop
출처 : http://ancdesign.pe.kr/60