vbs how to get result from a command line command
When in doubt, read the documentation. You probably want something like this:
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: When using
Exec() you pass input via the
.StdIn descriptor, not via
SendKeys() (which is a rather unreliable way of passing input anyway).
%COMSPEC% is a system environment variable with the full path to
cmd.exe and the
/c option makes
cmd.exe exit after the command (
date /t in the example) is finished.
If the command indicates success/failure with an exit code, you can check the
ExitCode property after the command finished.
If p.Status <> 0 Then WScript.Echo p.ExitCode
Edit2: Instead of using
atprogram interactively, can you construct commandlines that will perform particular tasks without user interaction? With non-interactive commandlines something like this might work:
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 spawns a command prompt without running a command. The
/k prevents it from closing. Because it isn't closing automatically, you can't use the
While p.Status = 0 loop here. If a command needs some time to finish, you need to
WScript.Sleep a number of seconds.
cmd.StdIn.WriteLine you can run commandlines in the
CMD instance. The function
ReadOutput() reads the output from
StdOut until the next prompt appears. You need to look for the prompt, because read operations are blocking, so you can't simply say "read all that's been printed yet".
After you're finished you quit
user1387865 3 months
I want to get the result of a simple command from the command line (cmd.exe) using a Windows script (.vbs). How is this done? I haven't been able to find a good/simple example or explanation. You could use the "date" or "time" command to provide an example with. Such as:
P.S. I am able to write the script code that opens cmd.exe and sends the command.
user1387865 almost 10 yearsOkay that works, thanks, but I guess I wasn't expecting such a streamlined answer. I'll just explain what I'm trying to do. I want to use Atmel's command line based programming to program some chips. It's really easy to use and works well. I am able to bring up the command shell and send it the commands using SendKeys, but when I try to include the command using Exec it just brings up the window but doesn't insert the command. What is the "/c" actually doing? Is there another way to get the output of a command? I need a way to know if the programming was successful or not.
user1387865 almost 10 yearsThanks for the help! I appreciate it. I just haven't been successful yet. For some reason, when I send <code>Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c atprogram")</code> it just opens the terminal without entering the command "atprogram". I've tried several things but it just won't run the command. I feel like I am forced to use SendKeys but then I can't see the output unless I leave the terminal window open.