use*_*865 7 windows vbscript get
我想使用Windows脚本(.vbs)从命令行(cmd.exe)获取简单命令的结果.这是怎么做到的?我无法找到一个好的/简单的例子或解释.您可以使用"日期"或"时间"命令来提供示例.如:

PS我能够编写打开cmd.exe并发送命令的脚本代码.
谢谢!
Ans*_*ers 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
Run Code Online (Sandbox Code Playgroud)
编辑:使用时Exec()通过.StdIn描述符传递输入,而不是通过SendKeys()(这是一种相当不可靠的传递输入的方式).
%COMSPEC%与完整的路径的系统环境变量cmd.exe和/c选项使cmd.exe该命令后出口(date /t在本例中)结束.
如果该命令指示带有退出代码的成功/失败,则可以ExitCode在命令完成后检查该属性.
If p.Status <> 0 Then WScript.Echo p.ExitCode
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
%COMSPEC% /k在不运行命令的情况下生成命令提示符.在/k从关闭防止它.因为它没有自动关闭,所以你不能在While p.Status = 0这里使用循环.如果命令需要一些时间才能完成,则需要WScript.Sleep几秒钟.
通过cmd.StdIn.WriteLine您可以在CMD实例中运行命令行.该函数ReadOutput()读取输出,StdOut直到出现下一个提示.您需要查找提示,因为读取操作是阻塞的,因此您不能简单地说"读取所有已打印的内容".
您完成后退出CMD.EXE通过cmd.Terminate.
| 归档时间: |
|
| 查看次数: |
9345 次 |
| 最近记录: |