我想使用Windows腳本(.vbs)從命令行(cmd.exe)獲取簡單命令的結果。這是如何完成的?我一直無法找到一個好的/簡單的例子或解釋。您可以使用「日期」或「時間」命令來提供示例。 如:vbs如何從命令行命令獲得結果
P.S.我可以編寫打開cmd.exe的腳本代碼併發送命令。
謝謝!
我想使用Windows腳本(.vbs)從命令行(cmd.exe)獲取簡單命令的結果。這是如何完成的?我一直無法找到一個好的/簡單的例子或解釋。您可以使用「日期」或「時間」命令來提供示例。 如:vbs如何從命令行命令獲得結果
P.S.我可以編寫打開cmd.exe的腳本代碼併發送命令。
謝謝!
如有疑問,請閱讀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
產生一個命令提示符下不運行的命令。 /k
阻止它關閉。由於它不會自動關閉,因此您不能在此使用While p.Status = 0
循環。如果某個命令需要一些時間才能完成,則需要WScript.Sleep
秒。
通過cmd.StdIn.WriteLine
可以運行在CMD
實例COMMANDLINES。功能ReadOutput()
讀取StdOut
的輸出,直到出現下一個提示。您需要查看提示,因爲讀取操作被阻止,所以您不能簡單地說「讀取所有已打印的內容」。
完成後,您通過cmd.Terminate
退出CMD.EXE
。
好的,有用,謝謝,但我想我並不期待這樣一個簡化的答案。我只會解釋我想要做的事情。我想用Atmel的基於命令行的編程來編程一些芯片。它使用起來非常簡單,而且運作良好。我能夠調出命令shell並使用SendKeys發送命令,但是當我嘗試使用Exec包含命令時,它只是彈出窗口但不插入命令。實際上做什麼是「/ c」?是否有另一種獲得命令輸出的方法?我需要一種方法來知道編程是否成功。 – user1387865
感謝您的幫助!我很感激。我還沒有成功。由於某種原因,當我發送Set p = CreateObject("WScript.Shell").Exec("%COMSPEC% /c atprogram")
時,它只是打開終端而不輸入命令「atprogram」。我嘗試了幾件事,但它不會運行命令。我覺得我被迫使用SendKeys,但是除非我打開終端窗口,否則我看不到輸出。 –
user1387865
加1因爲該圖很棒:o –