在vbs運(yùn)行命令行工具后讓命令窗口保持打開狀態(tài)的腳本
更新時(shí)間:2007年03月28日 00:00:00 作者:
問(wèn):
您好,腳本專家!如何在運(yùn)行像 Ping 或 Ipconfig 這樣的工具后讓命令窗口保持打開狀態(tài)?
-- DB
答:
您好,DB。這個(gè)問(wèn)題讓我們想起了往事。有一個(gè)腳本專家剛來(lái) Microsoft,那時(shí)許多人認(rèn)為 WMI 和 ADSI 對(duì)于腳本編寫者來(lái)說(shuō)太難使用。因此,人們建議這個(gè)腳本專家不使用 WMI 或 ADSI,而是干脆使用 VBScript 作為調(diào)用命令行工具的方法。事實(shí)上,這個(gè)腳本專家編寫的第一章就是一個(gè)關(guān)于事件日志管理的章節(jié),該章后來(lái)成為 Microsoft Windows 2000 腳本指南的一部分。它也是不含任何腳本編寫代碼之類內(nèi)容的章節(jié)。
您說(shuō)對(duì)了:只有腳本專家才會(huì)發(fā)現(xiàn)自己在編寫一本絕對(duì)不含任何腳本編寫代碼的腳本編寫指南。
當(dāng)然,腳本專家們使用雄辯的說(shuō)服,再配合大量的哀求,最終還是能夠讓人們相信,如果那個(gè)叫做 Microsoft Windows 2000 腳本指南的東西實(shí)際包含一兩個(gè)腳本,也是可以的。不過(guò),在此過(guò)程中,腳本專家們也對(duì)在腳本內(nèi)調(diào)用命令行工具略有了解,這也是為什么我們能夠回答您問(wèn)題的原因。
我們猜測(cè)您有與以下類似的腳本,該腳本運(yùn)行命令行工具 Ipconfig.exe:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("ipconfig /all")
您必定知道該腳本非常有效:彈出命令窗口,然后 Ipconfig 開始運(yùn)行。唯一的問(wèn)題是您還未來(lái)得及閱讀 IPconfig 返回的信息,命令窗口就關(guān)閉了(除非您讀得確實(shí)快)。這確實(shí)是個(gè)問(wèn)題。
那么如何解決它呢?方法如下:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k ipconfig /all")
如您所看到的,這個(gè)修訂的腳本保留了與原來(lái)腳本相同的基本結(jié)構(gòu):我們創(chuàng)建 Wscript.Shell 對(duì)象的一個(gè)實(shí)例,然后調(diào)用 Run 方法以實(shí)際運(yùn)行該命令行工具。區(qū)別在于調(diào)用該命令行工具的方式。在原來(lái)的腳本中,我們只是調(diào)用工具本身:
objShell.Run("ipconfig /all")
這一次,我們使用的語(yǔ)法大為不同:
objShell.Run("%comspec% /k ipconfig /all")
環(huán)境變量 %comspec% 代表 Windows 命令外殼;這等效于調(diào)用 Cmd.exe(它當(dāng)然會(huì)打開一個(gè)命令窗口)。那為什么不直接調(diào)用 Cmd.exe?是這樣,假設(shè)您的計(jì)算機(jī)運(yùn)行 Windows 98。在這些計(jì)算機(jī)上,通過(guò)運(yùn)行 Command.com 來(lái)調(diào)用命令外殼,因?yàn)闆]有 Cmd.exe。使用 %comspec% 有助于確保無(wú)論該腳本是在什么版本的 Windows 上運(yùn)行,都可以獲得命令窗口。
換句話說(shuō),使用此腳本時(shí)我們并不是直接運(yùn)行 Ipconfig,而是運(yùn)行命令外殼的實(shí)例,并向該實(shí)例傳遞幾個(gè)參數(shù)。此類參數(shù)中的第一個(gè)是 /k,它指示命令外殼執(zhí)行我們要求它完成的任務(wù),然后保持打開狀態(tài)。(我們得知 k 是 keep 的簡(jiǎn)寫形式,像在“keep open”中那樣,但我們不能肯定是否屬實(shí)。)我們也可以使用參數(shù) /c(c 代表 close),它在命令窗口完成任務(wù)時(shí)自動(dòng)關(guān)閉命令窗口。
傳遞給命令外殼的其它參數(shù)有何作用?那些參數(shù)只是運(yùn)行 IPconfig 所需的命令:ipconfig /all。想要使用 Ping.exe 對(duì) IP 地址 192.168.1.1 執(zhí)行 ping 命令嗎?以下腳本將執(zhí)行該操作,并確保之后命令窗口保持打開狀態(tài):
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k ping 192.168.1.1")
想要運(yùn)行 Net.exe 以獲取本地用戶帳戶列表并可以隨后進(jìn)行查看嗎?好的,沒問(wèn)題:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k net user")
想要 ¨C 嗯,您已領(lǐng)會(huì)了要旨。
如果往往會(huì)在腳本中大量使用命令行工具(這并沒什么不對(duì);請(qǐng)盡管使用您認(rèn)為最方便/最好的工具),則可能會(huì)對(duì)本專欄感興趣,它向您介紹如何更改命令窗口標(biāo)題和命令窗口顏色。過(guò)去了這么多年,腳本專家心中對(duì)調(diào)用命令行工具腳本的好感仍在,而且仍無(wú)法弄清楚為什么人們認(rèn)為編寫根本不含任何腳本的腳本編寫指南是一個(gè)不錯(cuò)的想法。
您好,腳本專家!如何在運(yùn)行像 Ping 或 Ipconfig 這樣的工具后讓命令窗口保持打開狀態(tài)?
-- DB
答:
您好,DB。這個(gè)問(wèn)題讓我們想起了往事。有一個(gè)腳本專家剛來(lái) Microsoft,那時(shí)許多人認(rèn)為 WMI 和 ADSI 對(duì)于腳本編寫者來(lái)說(shuō)太難使用。因此,人們建議這個(gè)腳本專家不使用 WMI 或 ADSI,而是干脆使用 VBScript 作為調(diào)用命令行工具的方法。事實(shí)上,這個(gè)腳本專家編寫的第一章就是一個(gè)關(guān)于事件日志管理的章節(jié),該章后來(lái)成為 Microsoft Windows 2000 腳本指南的一部分。它也是不含任何腳本編寫代碼之類內(nèi)容的章節(jié)。
您說(shuō)對(duì)了:只有腳本專家才會(huì)發(fā)現(xiàn)自己在編寫一本絕對(duì)不含任何腳本編寫代碼的腳本編寫指南。
當(dāng)然,腳本專家們使用雄辯的說(shuō)服,再配合大量的哀求,最終還是能夠讓人們相信,如果那個(gè)叫做 Microsoft Windows 2000 腳本指南的東西實(shí)際包含一兩個(gè)腳本,也是可以的。不過(guò),在此過(guò)程中,腳本專家們也對(duì)在腳本內(nèi)調(diào)用命令行工具略有了解,這也是為什么我們能夠回答您問(wèn)題的原因。
我們猜測(cè)您有與以下類似的腳本,該腳本運(yùn)行命令行工具 Ipconfig.exe:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("ipconfig /all")
您必定知道該腳本非常有效:彈出命令窗口,然后 Ipconfig 開始運(yùn)行。唯一的問(wèn)題是您還未來(lái)得及閱讀 IPconfig 返回的信息,命令窗口就關(guān)閉了(除非您讀得確實(shí)快)。這確實(shí)是個(gè)問(wèn)題。
那么如何解決它呢?方法如下:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k ipconfig /all")
如您所看到的,這個(gè)修訂的腳本保留了與原來(lái)腳本相同的基本結(jié)構(gòu):我們創(chuàng)建 Wscript.Shell 對(duì)象的一個(gè)實(shí)例,然后調(diào)用 Run 方法以實(shí)際運(yùn)行該命令行工具。區(qū)別在于調(diào)用該命令行工具的方式。在原來(lái)的腳本中,我們只是調(diào)用工具本身:
objShell.Run("ipconfig /all")
這一次,我們使用的語(yǔ)法大為不同:
objShell.Run("%comspec% /k ipconfig /all")
環(huán)境變量 %comspec% 代表 Windows 命令外殼;這等效于調(diào)用 Cmd.exe(它當(dāng)然會(huì)打開一個(gè)命令窗口)。那為什么不直接調(diào)用 Cmd.exe?是這樣,假設(shè)您的計(jì)算機(jī)運(yùn)行 Windows 98。在這些計(jì)算機(jī)上,通過(guò)運(yùn)行 Command.com 來(lái)調(diào)用命令外殼,因?yàn)闆]有 Cmd.exe。使用 %comspec% 有助于確保無(wú)論該腳本是在什么版本的 Windows 上運(yùn)行,都可以獲得命令窗口。
換句話說(shuō),使用此腳本時(shí)我們并不是直接運(yùn)行 Ipconfig,而是運(yùn)行命令外殼的實(shí)例,并向該實(shí)例傳遞幾個(gè)參數(shù)。此類參數(shù)中的第一個(gè)是 /k,它指示命令外殼執(zhí)行我們要求它完成的任務(wù),然后保持打開狀態(tài)。(我們得知 k 是 keep 的簡(jiǎn)寫形式,像在“keep open”中那樣,但我們不能肯定是否屬實(shí)。)我們也可以使用參數(shù) /c(c 代表 close),它在命令窗口完成任務(wù)時(shí)自動(dòng)關(guān)閉命令窗口。
傳遞給命令外殼的其它參數(shù)有何作用?那些參數(shù)只是運(yùn)行 IPconfig 所需的命令:ipconfig /all。想要使用 Ping.exe 對(duì) IP 地址 192.168.1.1 執(zhí)行 ping 命令嗎?以下腳本將執(zhí)行該操作,并確保之后命令窗口保持打開狀態(tài):
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k ping 192.168.1.1")
想要運(yùn)行 Net.exe 以獲取本地用戶帳戶列表并可以隨后進(jìn)行查看嗎?好的,沒問(wèn)題:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("%comspec% /k net user")
想要 ¨C 嗯,您已領(lǐng)會(huì)了要旨。
如果往往會(huì)在腳本中大量使用命令行工具(這并沒什么不對(duì);請(qǐng)盡管使用您認(rèn)為最方便/最好的工具),則可能會(huì)對(duì)本專欄感興趣,它向您介紹如何更改命令窗口標(biāo)題和命令窗口顏色。過(guò)去了這么多年,腳本專家心中對(duì)調(diào)用命令行工具腳本的好感仍在,而且仍無(wú)法弄清楚為什么人們認(rèn)為編寫根本不含任何腳本的腳本編寫指南是一個(gè)不錯(cuò)的想法。
相關(guān)文章
用vbs實(shí)現(xiàn)判斷計(jì)算機(jī)是筆記本還是臺(tái)式機(jī)的代碼
盡管我們并不知道您自己是怎么解決這個(gè)問(wèn)題的。大家知道,有一個(gè)很小的稱為 Win32_SystemEnclosure 的傻瓜式 WMI 類2008-06-06
VBScript開發(fā)自動(dòng)化測(cè)試腳本的方法分析
很多人都覺得微軟的VBScript功能比較弱,如果從開發(fā)自動(dòng)化測(cè)試的角度來(lái)講,更是不可能了。從我對(duì)VBScript腳本的了解來(lái)看,對(duì)一個(gè)腳本是否可以做自動(dòng)化測(cè)試需要這個(gè)測(cè)試人員具備兩方面的知識(shí),第一個(gè),就是對(duì)VBScript腳本開發(fā)語(yǔ)言精通,要了解VBScript的核心技術(shù)如何更廣泛的應(yīng)用;第二個(gè),就是要有自動(dòng)化的測(cè)試思想,這個(gè)一定得是做過(guò)測(cè)試工作的能夠了解的多一些。2008-03-03
一個(gè)實(shí)現(xiàn)VBS倒計(jì)時(shí)的代碼
一個(gè)實(shí)現(xiàn)VBS倒計(jì)時(shí)的代碼...2007-10-10
VBS數(shù)組函數(shù)學(xué)習(xí)實(shí)例分析
VBS數(shù)組在應(yīng)用中沒有像其他語(yǔ)句那么廣泛,VBS數(shù)組存在不少功能上的局限性(如二維數(shù)組的定義、賦值),在使用上也沒有java等語(yǔ)言那么便捷2013-04-04
VBS腳本實(shí)現(xiàn)遍歷批量替換多目錄多文件內(nèi)容的代碼
這篇文章主要介紹了VBS腳本實(shí)現(xiàn)遍歷批量替換多目錄多文件內(nèi)容的代碼,主要是結(jié)合了bat,實(shí)現(xiàn)這種效果,需要的朋友可以參考一下2018-12-12

