調用winzip命令列對上傳的多個檔案打包壓縮

來源:互聯網
上載者:User
打包|命令列|上傳|壓縮 如何在伺服器端調用winzip命令列對上傳的多個檔案打包壓縮?

要解決這個問題,首先要瞭解一下Windows Scripting Host,簡稱為WSH!下面引用一下微軟給的解釋:
************************************************************************
*  WSH是微軟指令碼技術系列中的一種,簡單講,就是提供了一種指令碼環境,     *
*  在這個環境中,預定義了一些對象,同時也可以使用COM裡的其他對象。     *
*  他使用一種指令碼引擎來對指令碼解釋執行,微軟自己支援VBSCRIPT和JSCRIPT, *
*  第三方也可以開發自己的指令碼引擎。                                    *
************************************************************************
具體點,就是你先編好一些指令檔(微軟內建例子若干,尾碼.vbs或 .js),
然後用一個程式對他解釋執行,這個程式就叫Windows Scripting Host,程式
的名字是Wscript.exe(或者命令列的Cscript.exe),你可以查看一下你的機器
裡有沒有這兩個檔案,就知道有沒有WSH了。(win2000是在winnt/system32/下)
這非常像批次檔,只不過檔案裡不是命令列,而是指令碼語言寫的指令碼。

再來簡單介紹一下WSH內建的幾個內建對象包括:

1.由 Wscript.exe 提供的對象
Wscript 作為 Wscript 公開給指令碼引擎。
WshArguments 未公開;通過 Wscript.Arguments 屬性訪問。 入

2.由 WSHom.Ocx 提供的對象。
WshShell 自動對象。ProgID 是 Wscript.WshShell。
(註:這個就是我們要用到的,可以執行dos命令)
WshNetwork 自動對象。ProgID 是 Wscript.WshNetwork。
WshShortcut 未公開;通過 WshShell.CreateShortcut 方法訪問。
WshUrlShortcut 未公開;通過 WshShell.CreateShortcut 方法訪問。
WshCollection 未公開;通過 WshNetwork.EnumNetworkDrives 或 WshNetwork.EnumPrinterConnection 方法訪問。
WshEnvironment 未公開;通過 WshShell.Environment 屬性訪問。
WshSpecialFolders 未公開;通過 WshShell.Folder 屬性訪問。

他們主要可以完成環境變數的擷取,網路登陸,磁碟機映射,快截方式建立,
程式載入,特殊檔案夾(如系統檔案夾)資訊擷取等功能。

如果你的系統裡支援ADO等COM組件,你同樣可以使用,
下面這個例子示範開啟寫字板查看文字檔,同時建立一個文字檔並寫入一
段話,你可以把他拷貝到寫字板中,然後以.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程式設計語言中應用
<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 " 命令成功執行!"
else  
   Response.write  " 命令執行失敗!許可權不夠或者該程式無法在DOS狀態下運行"
end if
</script>
註:
1.其中runat=server必須要有
2.Set WshShell = Wscript.CreateObject("Wscript.Shell")
要改為Set WshShell = server.CreateObject("Wscript.Shell"),
3.參數1代表SW_SHOWNORMAL, 啟用並顯示一個視窗。若視窗是最小化或最大化,則恢複到其原來的大小和位置。
4.TRUE代表返回執行的錯誤,False或者為指定代表指令碼繼續執行而不等待進程結束。
5.調用WSH的內建對象了,可以象調用函數和過程一樣。
如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

現在我們言歸正傳來看看如何對檔案進行壓縮和解壓!
大家都知道winzip對檔案解壓和壓縮都易如反掌,但是如何通過程式和命令列對其調用呢?
當然winzip的作者已經開發出
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的目錄中產生winzip命令列協助檔案和程式WZZIP.exe,WZUNZIP.EXE。
你可以開始運行裡調用:
如:"c:\program files\winzip\wzzip"  myfile.zip
也可以拷貝這裡兩個檔案到任意目錄下,直接在dos視窗下運行
如:wzzip.exe  myfile.zip
你可以在系統的環境變數裡加入set path=c:\windows;c:\program files\winzip;
就可以在任何地方不用加入路經調用了!

現在來簡單的瞭解一下協助中兩個命令的基本用法
壓縮檔用 WZZIP.exe :
通用格式:wzzip [options] zipfile [@listfile] [files...]
[options]包括:
-a              預設的操作,壓縮檔
-a+             壓縮檔,並刪除要壓縮的檔案
-b[drive|path]    是在另外的磁碟機上建立臨時壓縮檔
-d              刪除zip檔案中指定的目標檔案
-e<x|n|f|s|0>   是設定壓縮比率,x最大,0最小
-f              替換zip檔案中存在的檔案
-h|-?            察看協助
-v              建立一個壓縮檔的列表資訊
-@list             先建立一個包含所有要解壓的檔案的檔案,然後按所包含的的檔案名稱壓縮
...............(其他具體看協助檔案)
[@listfile]     是壓縮檔的列表資訊紀錄
[files...]      則是要壓縮的多個檔案,用空格隔開,也可以用萬用字元

例:
壓縮目前的目錄的所有檔案   
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
列出一個壓縮檔的列表內容
wzzip -v test.zip



解壓檔案用WZUNZIP.exe :
通過格式:wzunzip [options] zipfile [@listfile] [path] [files...]
[options]包括:
-c[m]            解壓是顯示檔案清單在dos螢幕中
-d              重建zip檔案中的目錄結構
-f              只解壓在zip檔案裡同目前檔案夾存在的同名的檔案,如果沒有則不解壓
-jhrs            忽視zip檔案裡的檔案的隱藏、唯讀、系統屬性
-Jhrs            只解壓帶有隱藏、唯讀、系統屬性的檔案
-n              只解壓叫新的檔案,如果要解壓的檔案比已存在的新則替換。
-o              不用通過yes來確定是否要替換檔案
-v              建立一個壓縮檔的列表資訊
-@list            先建立一個包含所有要解壓的檔案的檔案,然後按所包含的的檔案名稱解壓
...............(其他具體看協助檔案)
例如:
建立所有檔案到目前的目錄下
wzunzip test.zip
從test.zip中建立abc.txt到目前的目錄下
wzunzip test.zip abc.txt
建立在test.zip中的目錄結構及檔案到目前的目錄下
wzunzip -d test.zip
建立在test.zip中的目錄結構及檔案到c:\docs下
wzunzip -d test.zip c:\docs從test.zip中建立包含在files.ist中的檔案名稱的檔案
wzunzip test.zip @files.lst
顯示test.zip的檔案清單內容
wzunzip -v test.zip
顯示壓縮檔中所有類型為txt的檔案清單內容
wzunzip -v test.zip *.txt


有了以上的準備,那麼我們現在來編寫VBS來執行檔案解壓和壓縮就易如反掌了:
'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 " 命令成功執行!"
else  
   Response.write  " 命令執行失敗!許可權不夠或者該程式無法在DOS狀態下運行"
end if
</script>


怎麼樣很簡單吧,如果我們再把檔案上傳和此結合起來,就會產生很多使用的功能。如:
在用上傳組件上傳多個檔案後,可以對其多個檔案打包,以提供給其他人zip檔案下載
或者上傳一個zip檔案後,可以利用程式對其解壓,以提供給其他人單個檔案下載
很方便使用者吧!我會在以後的文章裡把這兩種變化寫出來!文中難免有疏漏的地方,請大家多多指正!
有問題可以聯絡comezxn@163.com 或 在http://club.topdigi.com.cn討論!


以上的例子均在win2000+iis5.0上測試過!


相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。