7

我想使用 Windows 脚本 (.vbs) 从命令行 (cmd.exe) 获取简单命令的结果。这是怎么做到的?我找不到一个好的/简单的例子或解释。您可以使用“日期”或“时间”命令来提供示例。如:

在此处输入图像描述

PS 我能够编写打开 cmd.exe 并发送命令的脚本代码。

谢谢!

4

1 回答 1

10

如有疑问,请阅读文档。你可能想要这样的东西:

Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c date /t")
Do While p.Status = 0
  WScript.Sleep 100
Loop
WScript.Echo p.StdOut.ReadAll

编辑:使用Exec()时通过.StdIn描述符传递输入,而不是通过SendKeys()(无论如何这是一种相当不可靠的传递输入方式)。

%COMSPEC%是一个具有完整路径的系统环境变量,cmd.exe并且该/c选项在命令(在示例中)完成cmd.exe后退出。date /t

如果命令通过退出代码指示成功/失败,您可以ExitCode在命令完成后检查属性。

If p.Status <> 0 Then WScript.Echo p.ExitCode

Edit2:atprogram您可以构建命令行来执行特定任务而无需用户交互,而不是交互式使用?使用非交互式命令行可能会起作用:

prompt = "C:\>"
atprogram_cmdline_1 = "atprogram.exe ..."
atprogram_cmdline_2 = "atprogram.exe ..."
'...

Function ReadOutput(p)
  text = ""
  Do Until Right(text, Len(prompt)) = prompt
    text = text & p.StdOut.Read(1)
  Loop
  ReadOutput = text
End Function

Set cmd = CreateObject("WScript.Shell").Exec("%COMSPEC% /k")
ReadOutput cmd  ' skip over first prompt

cmd.StdIn.WriteLine(atprogram_cmdline_1)
WScript.Echo ReadOutput(cmd)
cmd.StdIn.WriteLine(atprogram_cmdline_2)
WScript.Echo ReadOutput(cmd)
'...

cmd.Terminate  ' exit CMD.EXE

%COMSPEC% /k在不运行命令的情况下生成命令提示符。/k防止它关闭。因为它不会自动关闭,所以您不能在While p.Status = 0此处使用循环。如果一个命令需要一些时间来完成,你需要WScript.Sleep几秒钟。

通过cmd.StdIn.WriteLine您可以在CMD实例中运行命令行。该函数ReadOutput()读取输出,StdOut直到出现下一个提示。您需要寻找提示,因为读取操作是阻塞的,所以您不能简单地说“读取所有已打印的内容”。

完成后,您CMD.EXE通过退出cmd.Terminate

于 2012-10-01T20:14:27.627 回答