分享
 
 
 

服务器端调用winzip命令行对上传的多个文件打包压缩

王朝asp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

要解决这个问题,首先要了解一下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文件后,可以利用程序对其解压,以提供给其他人单个文件下载

本文是作者经总结而作。文中难免有疏漏的地方,请大家多多指正!

以上的例子均在win2000+iis5.0上测试过!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有