VBS运行cmd.exe输出到变量;不是文本文件

时间:2014-02-28 22:11:54

标签: vbscript

这是我到目前为止所拥有的。有用;将文件夹路径输出到文本文件。 我真正想要的是将数据输出到变量。我在网上看到的每个例子都展示了如何使用以下内容完成此操作:

set objScriptExec = wshShell.Exec (strCommand) 

接着是

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

我希望它与Run一起运行,而不是Exec,因为我希望隐藏命令提示符窗口,因为我将使用下面的代码执行许多命令。如何将输出捕获到变量?

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

2 个答案:

答案 0 :(得分:2)

这可以使用Windows Script Host Exec命令完成。可以访问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)

注意:更换&#34; ReadLine&#34;以上&#34;阅读(1)&#34;完成同样的事情,但增加了处理字符而不是整行的能力。

答案 1 :(得分:1)

当然Wscript.Shell会更容易,但是,由于您希望对会话进行更精细的控制,请考虑使用Win32_Process。通常,使用它来控制新窗口的位置,但是,在您的情况下,您希望它隐藏,因此我设置startupInfo.ShowWindow = 0,这意味着SW_HIDE。下面声明了一个名为VBScript的{​​{1}}函数,它将在一个不可见的窗口中运行一个命令,将输出保存到文本文件,然后将文本文件的内容返回给调用者。例如,我使用RunCmd命令调用RunCmd

HOSTNAME

参考文献: