संदेह में, documentation पढ़ें।
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
विकल्प के साथ एक सिस्टम वातावरण चर रहा है आदेश (उदाहरण में date /t
) समाप्त हो गया है के बाद cmd.exe
बाहर निकलें बनाता है।
यदि आदेश निकास कोड के साथ सफलता/विफलता इंगित करता है, तो आप आदेश समाप्त होने के बाद ExitCode
संपत्ति देख सकते हैं।
If p.Status <> 0 Then WScript.Echo p.ExitCode
EDIT2: के बजाय atprogram
सहभागी उपयोग कर, आप commandlines कि उपयोगकर्ता सहभागिता के बिना विशेष कार्यों प्रदर्शन करेंगे निर्माण कर सकते हैं? साथ इस तरह गैर-सहभागी commandlines कुछ काम कर सकते हैं:
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। /k
इसे बंद होने से रोकता है। चूंकि यह स्वचालित रूप से बंद नहीं हो रहा है, इसलिए आप यहां While p.Status = 0
लूप का उपयोग नहीं कर सकते हैं। यदि किसी आदेश को समाप्त करने के लिए कुछ समय चाहिए, तो आपको WScript.Sleep
कई सेकंड की आवश्यकता है।
cmd.StdIn.WriteLine
के माध्यम से आप CMD
उदाहरण में कमांडलाइन चला सकते हैं। फ़ंक्शन ReadOutput()
अगली प्रॉम्प्ट दिखाई देने तक StdOut
से आउटपुट पढ़ता है। आपको प्रॉम्प्ट की तलाश करनी होगी, क्योंकि पढ़ना ऑपरेशन अवरुद्ध हो रहा है, इसलिए आप बस "अभी तक मुद्रित किए गए सभी को पढ़ सकते हैं" नहीं कह सकते हैं।
समाप्त होने के बाद आप cmd.Terminate
के माध्यम से छोड़ दें।
स्रोत
2012-10-01 20:14:27
प्लस 1 क्योंकि आरेख अद्भुत है: o –