要解決這個問題,首先要了解一下Windows Scripting Host,簡稱為WSH!下面引用一下微軟給的解釋:
WSH是微軟腳本技術(shù)系列中的一種,簡單講,就是提供了一種腳本環(huán)境, 在這個環(huán)境中,預(yù)定義了一些對象,同時也可以使用COM里的其他對象。 他使用一種腳本引擎來對腳本解釋執(zhí)行,微軟自己支持VBSCRIPT和JSCRIPT, 第三方也可以開發(fā)自己的腳本引擎。
具體點,就是你先編好一些腳本文件(微軟自帶例子若干,后綴.vbs或 .js), 然后用一個程序?qū)λ忉寛?zhí)行,這個程序就叫Windows Scripting Host,程序 的名字是Wscript.exe(或者命令行的Cscript.exe),你可以查看一下你的機器 里有沒有這兩個文件,就知道有沒有WSH了。(win2000是在winnt/system32/下) 這非常像批處理文件,只不過文件里不是命令行,而是腳本語言寫的腳本。
再來簡單介紹一下WSH自帶的幾個內(nèi)置對象包括:
1.由 Wscript.exe 提供的對象 Wscript 作為 Wscript 公開給腳本引擎。 WshArguments 未公開;通過 Wscript.Arguments 屬性訪問。 入
2.由 WSHom.Ocx 提供的對象。 WshShell 自動對象。ProgID 是 Wscript.WshShell。 (注:這個就是我們要用到的,可以執(zhí)行dos命令) WshNetwork 自動對象。ProgID 是 Wscript.WshNetwork。 WshShortcut 未公開;通過 WshShell.CreateShortcut 方法訪問。 WshUrlShortcut 未公開;通過 WshShell.CreateShortcut 方法訪問。 WshCollection 未公開;通過 WshNetwork.EnumNetworkDrives 或 WshNetwork.EnumPrinterConnection 方法訪問。 WshEnvironment 未公開;通過 WshShell.Environment 屬性訪問。 WshSpecialFolders 未公開;通過 WshShell.Folder 屬性訪問。
他們主要可以完成環(huán)境變量的獲取,網(wǎng)絡(luò)登陸,驅(qū)動器映射,快截方式創(chuàng)建, 程序加載,特殊文件夾(如系統(tǒng)文件夾)信息獲取等功能。
如果你的系統(tǒng)里支持ADO等COM部件,你同樣可以使用, 下面這個例子演示打開寫字板查看文本文件,同時創(chuàng)建一個文本文件并寫入一 段話,你可以把他拷貝到寫字板中,然后以.vbs為后綴存盤,之后雙擊他,
'test.vbs
'下面用SHELL對象啟動程序
Set WshShell = Wscript.CreateObject("Wscript.Shell") WshShell.Run ("notepad " & Wscript.ScriptFullName)
'用COM對象Scripting.FileSystemObject操作文本文件
Set fs = Wscript.CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("c:\testfile.txt", True) a.WriteLine("這是一個測試。") a.Close
也可以在asp等web編程語言中應(yīng)用 <script language="VBScript.Encode" runat=server> '上面用SHELL對象啟動程序 Set WshShell = server.CreateObject("Wscript.Shell") IsSuccess = WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true) if IsSuccess = 0 Then Response.write " 命令成功執(zhí)行!" else Response.write " 命令執(zhí)行失敗!權(quán)限不夠或者該程序無法在DOS狀態(tài)下運行" end if </script>
注: 1.其中runat=server必須要有 2.Set WshShell = Wscript.CreateObject("Wscript.Shell") 要改為Set WshShell = server.CreateObject("Wscript.Shell"), 3.參數(shù)1代表SW_SHOWNORMAL, 激活并顯示一個窗口。若窗口是最小化或最大化,則恢復(fù)到其原來的大小和位置。 4.TRUE代表返回執(zhí)行的錯誤,F(xiàn)alse或者為指定代表腳本繼續(xù)執(zhí)行而不等待進程結(jié)束。 5.調(diào)用WSH的內(nèi)置對象了,可以象調(diào)用函數(shù)和過程一樣。 如call WshShell.Run ("D:\winnt\system32\cmd.exe" ,1, true)
如果你對WSH感興趣,想了解更多的話,請察看 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsconwshbasics.asp http://www.dev-club.com/club/bbs/showEssence.asp?id=11136
現(xiàn)在我們言歸正傳來看看如何對文件進行壓縮和解壓! 大家都知道winzip對文件解壓和壓縮都易如反掌,但是如何通過程序和命令行對其調(diào)用呢? 當(dāng)然winzip的作者已經(jīng)開發(fā)出 WinZip Command Line Support Add-On Version 1.0 大家去可以去http://www.winzip.com/wzcline.htm 下載wzcline.exe! 前提是本機須安裝winzip8.0或更高版本的支持,如果你不是winzip8.0,去 http://www.winzip.com/download.htm 下載!
下載后,直接安裝就可以! 就會在winzip的目錄中產(chǎn)生winzip命令行幫助文件和程序WZZIP.exe,WZUNZIP.EXE。 你可以開始運行里調(diào)用: 如:"c:\program files\winzip\wzzip" myfile.zip 也可以拷貝這里兩個文件到任意目錄下,直接在dos窗口下運行 如:wzzip.exe myfile.zip 你可以在系統(tǒng)的環(huán)境變量里加入set path=c:\windows;c:\program files\winzip; 就可以在任何地方不用加入路經(jīng)調(diào)用了!
現(xiàn)在來簡單的了解一下幫助中兩個命令的基本用法 壓縮文件用 WZZIP.exe : 通用格式:wzzip [options] zipfile [@listfile] [files...] [options]包括: -a 默認(rèn)的操作,壓縮文件 -a+ 壓縮文件,并刪除要壓縮的文件 -b[drive|path] 是在另外的驅(qū)動器上創(chuàng)建臨時壓縮文件 -d 刪除zip文件中指定的目標(biāo)文件 -e<x|n|f|s|0> 是設(shè)置壓縮比率,x最大,0最小 -f 替換zip文件中存在的文件 -h|-? 察看幫助 -v 創(chuàng)建一個壓縮文件的列表信息 -@list 先創(chuàng)建一個包含所有要解壓的文件的文件,然后按所包含的的文件名壓縮 ...............(其他具體看幫助文件) [@listfile] 是壓縮文件的列表信息紀(jì)錄 [files...] 則是要壓縮的多個文件,用空格隔開,也可以用通配符
例: 壓縮當(dāng)前目錄的所有文件 wzzip test.zip *.* 壓縮類型為txt的所有文件 wzzip test.zip *.txt 壓縮兩個文件 wzzip test.zip abc.txt def.txt 壓縮類型為txt的所有文件除了abc.txt wzzip -xABC.TXT test.zip *.txt 壓縮D:\docs下的所有類型為txt的文件及子目錄 wzzip -rp test.zip d:\docs\*.txt 把zipit.1st里的文件更新到test.zip wzzip -u test.zip @Zipit.lst 列出一個壓縮文件的列表內(nèi)容 wzzip -v test.zip
解壓文件用WZUNZIP.exe : 通過格式:wzunzip [options] zipfile [@listfile] [path] [files...] [options]包括: -c[m] 解壓是顯示文件列表在dos屏幕中 -d 重建zip文件中的目錄結(jié)構(gòu) -f 只解壓在zip文件里同目前文件夾存在的同名的文件,如果沒有則不解壓 -jhrs 忽視zip文件里的文件的隱藏、只讀、系統(tǒng)屬性 -Jhrs 只解壓帶有隱藏、只讀、系統(tǒng)屬性的文件 -n 只解壓叫新的文件,如果要解壓的文件比已存在的新則替換。 -o 不用通過yes來確定是否要替換文件 -v 創(chuàng)建一個壓縮文件的列表信息 -@list 先創(chuàng)建一個包含所有要解壓的文件的文件,然后按所包含的的文件名解壓 ...............(其他具體看幫助文件) 例如: 創(chuàng)建所有文件到當(dāng)前目錄下 wzunzip test.zip 從test.zip中創(chuàng)建abc.txt到當(dāng)前目錄下 wzunzip test.zip abc.txt 創(chuàng)建在test.zip中的目錄結(jié)構(gòu)及文件到當(dāng)前目錄下 wzunzip -d test.zip 創(chuàng)建在test.zip中的目錄結(jié)構(gòu)及文件到c:\docs下 wzunzip -d test.zip c:\docs從test.zip中創(chuàng)建包含在files.ist中的文件名的文件 wzunzip test.zip @files.lst 顯示test.zip的文件列表內(nèi)容 wzunzip -v test.zip 顯示壓縮文件中所有類型為txt的文件列表內(nèi)容 wzunzip -v test.zip *.txt
有了以上的準(zhǔn)備,那么我們現(xiàn)在來編寫VBS來執(zhí)行文件解壓和壓縮就易如反掌了:
'test.vbs '上面用SHELL對象啟動程序 Set WshShell = Wscript.CreateObject("Wscript.Shell") WshShell.Run ("c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt")
'test.asp '上面用SHELL對象啟動程序 <script language="VBScript.Encode" runat=server> '上面用SHELL對象啟動程序 Set WshShell = server.CreateObject("Wscript.Shell") IsSuccess = WshShell.Run (" c:\wzzip.exe c:\test.zip c:\a.txt c:\b.txt" ,1, true) if IsSuccess = 0 Then Response.write " 命令成功執(zhí)行!" else Response.write " 命令執(zhí)行失。(quán)限不夠或者該程序無法在DOS狀態(tài)下運行" end if </script>
如果我們再把文件上傳和此結(jié)合起來,就會產(chǎn)生很多使用的功能。如: 在用上傳組件上傳多個文件后,可以對其多個文件打包,以提供給其他人zip文件下載 或者上傳一個zip文件后,可以利用程序?qū)ζ浣鈮,以提供給其他人單個文件下載 本文是作者經(jīng)總結(jié)而作。文中難免有疏漏的地方,請大家多多指正!
以上的例子均在win2000+iis5.0上測試過!
出處:CSDN
責(zé)任編輯:cjj
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|