vbs как получить результат от команды командной строки
Я хочу получить результат простой команды из командной строки (cmd.exe) с помощью скрипта Windows (.vbs). Как это делается? Я не смог найти хороший/простой пример или объяснение. Для примера можно использовать команду "дата" или "время". Например:

P. S. Я в состоянии написать код скрипта, который открывает УМК.exe и отправляет команды.
спасибо!
1 ответов
когда вы сомневаетесь, прочитайте документация. Вы, вероятно, хотите что-то вроде этого:
Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c date /t")
Do While p.Status = 0
WScript.Sleep 100
Loop
WScript.Echo p.StdOut.ReadAll
Edit: при использовании Exec() вы передаете вход через .StdIn дескриптор, а не через SendKeys() (что в любом случае является довольно ненадежным способом передачи ввода).
%COMSPEC% является системной переменной среды с полным путем к cmd.exe и делает 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 запускает команду запрос без выполнения команды. The /k предотвращает его от закрытия. Поскольку он не закрывается автоматически, вы не можете использовать While p.Status = 0 петли здесь. Если команде требуется некоторое время для завершения, вам нужно WScript.Sleep несколько секунд.
Via cmd.StdIn.WriteLine вы можете запускать командные строки в CMD экземпляра. Функция ReadOutput() считывает вывод из StdOut пока не появится следующее приглашение. Вам нужно искать приглашение, потому что операции чтения блокируются, поэтому вы не можете просто скажите: "прочтите все, что уже напечатано".
после того, как вы закончите, вы бросите CMD.EXE via cmd.Terminate.