2014-02-28 1 views
4

이것은 내가 지금까지 가지고있는 것입니다. 그것은 작동합니다. temp에 대한 폴더 경로를 텍스트 파일로 출력합니다. 정말로 원하는 것은 변수에 데이터를 출력하는 것입니다. 나는에 명령 프롬프트 창을 원하기 때문에, 나는이 Run하지 Exec으로 실행하려는VBS cmd.exe 출력을 변수로 실행하십시오. 텍스트 파일이 아님

strresult = LCase(objScriptExec.StdOut.ReadAll. // code 

다음

set objScriptExec = wshShell.Exec (strCommand) 

: 나는 온라인으로 볼 때마다 예처럼 사용하여이 일을하는 방법을 보여줍니다 아래 코드로 많은 명령을 수행 할 때 숨겨져 있어야합니다. 변수에 대한 출력을 어떻게 캡처 할 수 있습니까? 당신이 Win32_Process을 사용하는 것이 좋습니다 세션의 더 미세 입자 제어를 원하기 때문에 물론 Wscript.Shell

Set wsShell = CreateObject("WScript.Shell") 
strCommand = "cmd /c echo %temp% > %temp%\test.txt" 
wsShell.Run strcommand,0,True 
+0

나는 youve가 이미 이걸 살펴 봤지만 텍스트 파일을 저장하고 텍스트 파일을 읽은 다음 삭제하는 것이 어떻겠습니까? http://stackoverflow.com/questions/5690134/running-command-line-silently-with-vbscript-and-getting-output – Rich

+0

또는 http://stackoverflow.com/a/4963209/603855 –

답변

1

는 훨씬 쉽게,하지만 것입니다. 대개이 방법을 사용하여 새 창 배치를 제어하지만, 귀하의 경우 숨김을 원하므로 startupInfo.ShowWindow = 0SW_HIDE을 설정합니다. 다음은 이라는 VBScript 함수를 선언하고 보이지 않는 창에서 명령을 실행하여 출력을 텍스트 파일로 저장 한 다음 텍스트 파일의 내용을 호출자에게 반환합니다. 예를 들어, 나는 HOSTNAME 명령을 RunCmd을 호출 :

Function RunCmd(strCmd) 
    Dim wmiService 
    Set wmiService = GetObject("winmgmts:\\.\root\cimv2") 
    Dim startupInfo 
    Set startupInfo = wmiService.Get("Win32_ProcessStartup") 
    Dim fso 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Dim cwd 
    cwd = fso.GetAbsolutePathname(".") 
    startupInfo.SpawnInstance_ 
    startupInfo.ShowWindow = 0 
    ' startupInfo.X = 50 
    ' startupInfo.y = 50 
    ' startupInfo.XSize = 150 
    ' startupInfo.YSize = 50 
    ' startupInfo.Title = "Hello" 
    ' startupInfo.XCountChars = 36 
    ' startupInfo.YCountChars = 1 
    Dim objNewProcess 
    Set objNewProcess = wmiService.Get("Win32_Process") 
    Dim intPID 
    Dim errRtn 
    errRtn = objNewProcess.Create("cmd.exe /c """ & strCmd & """ > out.txt", cwd, startupInfo, intPID) 
    Dim f 
    Set f = fso.OpenTextFile("out.txt", 1) 
    RunCmd = f.ReadAll 
    f.Close 
End Function 

MsgBox RunCmd("HOSTNAME") 

참고 : 이것은 Windows 스크립트로 수행 할 수 있습니다

+0

나는 분명히하고 싶었습니다. txt 파일을 만드는 것. txt 파일 대신 변수에 출력하는 방법이있을 거라고 생각했을 것입니다. – user3366722

2

가 실행 명령을 호스트합니다. StdOut, StdIn 및 StdErr 모두 액세스 할 수 있으며 명령이 완료되면 ERRORLEVEL을 사용할 수 있습니다.

Dim strMessage, strScript, strStdErr, strStdOut 
Dim oExec, oWshShell, intErrorLevel 
Dim ComSpec 

Set oWshShell = CreateObject("WScript.Shell") 
ComSpec = oWshShell.ExpandEnvironmentStrings("%comspec%") 

intErrorLevel = 0 
strScript = ComSpec & " /C echo %temp%" 

On Error Resume Next 
Set oExec = oWshShell.Exec (strScript) 
If (Err.Number <> 0) Then 
    strMessage = "Error: " & Err.Message 
    intErrorLevel = 1 
Else 
    Do While oExec.Status = 0 
    Do While Not oExec.StdOut.AtEndOfStream 
     strStdOut = strStdOut & oExec.StdOut.ReadLine & vbCrLf 
    Loop 
    Do While Not oExec.StdErr.AtEndOfStream 
     strStdErr = strStdErr & oExec.StdErr.ReadLine & vbCrLf 
    Loop 
    WScript.Sleep 0 
    Loop 
    intErrorLevel = oExec.ExitCode 
    strMessage = strStdOut & strStdErr & CStr(intErrorLevel) 
End If 

WScript.Echo (strMessage) 

참고 : 위에서 "에서는 ReadLine 교체"같은 일을 수행하지만, 전체 라인이 아닌 문자를 처리 할 수있는 기능을 추가합니다 "(1) 읽기 '.

관련 문제