Im Zweifelsfall lesen Sie bitte die Dokumentation . Wahrscheinlich wollen Sie so etwas wie das hier:
Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c date /t")
Do While p.Status = 0
WScript.Sleep 100
Loop
WScript.Echo p.StdOut.ReadAll
Edita: Bei der Verwendung von Exec()
übergeben Sie Eingaben über die .StdIn
Deskriptor, nicht über SendKeys()
(was ohnehin eine eher unzuverlässige Art der Übermittlung von Eingaben ist).
%COMSPEC%
ist eine Systemumgebungsvariable mit dem vollständigen Pfad zu cmd.exe
und die /c
Option macht cmd.exe
nach dem Befehl beenden ( date /t
im Beispiel) ist beendet.
Wenn der Befehl Erfolg/Fehlschlag mit einem Exit-Code anzeigt, können Sie die ExitCode
nachdem der Befehl beendet wurde.
If p.Status <> 0 Then WScript.Echo p.ExitCode
Bearbeiten2: Anstelle der Verwendung von atprogram
interaktiv, können Sie Befehlszeilen konstruieren, die bestimmte Aufgaben ohne Benutzerinteraktion ausführen? Bei nicht interaktiven Befehlszeilen könnte so etwas funktionieren:
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
ruft eine Eingabeaufforderung auf, ohne einen Befehl auszuführen. Die Seite /k
verhindert, dass sie sich schließt. Da es sich nicht automatisch schließt, können Sie die Funktion While p.Status = 0
Schleife hier. Wenn ein Befehl einige Zeit braucht, um fertig zu werden, müssen Sie WScript.Sleep
eine Anzahl von Sekunden.
Über cmd.StdIn.WriteLine
können Sie Befehlszeilen in der CMD
Instanz. Die Funktion ReadOutput()
liest die Ausgabe von StdOut
bis die nächste Aufforderung erscheint. Sie müssen nach der Aufforderung Ausschau halten, da Lesevorgänge blockiert werden, so dass Sie nicht einfach sagen können: "Lesen Sie alles, was bisher gedruckt wurde".
Wenn Sie fertig sind, hören Sie auf. CMD.EXE
über cmd.Terminate
.