<address id="997j9"></address>

                    首頁 > 開發 > Asp > 正文

                    如何在服務器端調用winzip命令行對上傳的多個文件打包壓縮

                    2018-10-16 21:06:53
                    字體:
                    來源:轉載
                    供稿:網友
                    如何在服務器端調用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/&#115cript56/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文件后,可以利用程序對其解壓,以提供給其他人單個文件下載
                    很方便用戶吧!我會在以后的文章里把這兩種變化寫出來!文中難免有疏漏的地方,請大家多多指正!


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

                    發表評論 共有條評論
                    用戶名: 密碼:
                    驗證碼: 匿名發表

                    圖片精選

                    久久久国产精品午夜一区 欧美最爽乱婬视频免费看 日产精品99久久久久久 精品国产污污免费网站入口 亚洲碰碰人人Av熟女天堂

                                    <address id="997j9"></address>

                                      <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>