当前位置: 移动技术网 > IT编程>开发语言>.net > 如何在服务器端调用winzip命令行对上传的多个文件打包压缩

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

2018年12月29日  | 移动技术网IT编程  | 我要评论

邪恶动态图后式入叉,wwe选手,浦东新区haobc

如何在服务器端调用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。
(注:这个就是我们要用到的,可以执行命令)
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: estfile.txt", true)
a.writeline("这是一个测试。")
a.close

也可以在等web语言中应用
<script language="vbscript.encode" runat=server>
上面用shell对象启动程序
set wshshell = server.createobject("wscript.shell")
issuccess = wshshell.run ("d:winntsystem32cmd.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:winntsystem32cmd.exe" ,1, true)

如果你对wsh感兴趣,想了解更多的话,请察看
https://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsconwshbasics.asp
https://www.dev-club.com/club/bbs/showessence.asp?id=11136

现在我们言归正传来看看如何对文件进行压缩和解压!
大家都知道winzip对文件解压和压缩都易如反掌,但是如何通过程序和命令行对其调用呢?
当然winzip的作者已经开发出
winzip command line support add-on version 1.0
大家去可以去https://www.winzip.com/wzcline.htm 下载wzcline.exe!
前提是本机须安装winzip8.0或更高版本的支持,如果你不是winzip8.0,去
https://www.winzip.com/download.htm 下载!

下载后,直接安装就可以!
就会在winzip的目录中产生winzip命令行帮助文件和程序wzzip.exe,wzunzip.exe。
你可以开始运行里调用:
如:"c:program fileswinzipwzzip" myfile.zip
也可以拷贝这里两个文件到任意目录下,直接在dos窗口下运行
如:wzzip.exe myfile.zip
你可以在系统的环境变量里加入set path=c:windows;c:program fileswinzip;
就可以在任何地方不用加入路经调用了!

现在来简单的了解一下帮助中两个命令的基本用法
压缩文件用 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: est.zip c:a.txt c:.txt")


test.asp
*********************
上面用shell对象启动程序
*********************
<script language="vbscript.encode" runat=server>
上面用shell对象启动程序
set wshshell = server.createobject("wscript.shell")
issuccess = wshshell.run (" c:wzzip.exe c: est.zip c:a.txt c:.txt" ,1, true)
if issuccess = 0 then
response.write " 命令成功执行!"
else
response.write " 命令执行失败!权限不够或者该程序无法在dos状态下运行"
end if
</script>


怎么样很简单吧,如果我们再把文件上传和此结合起来,就会产生很多使用的功能。如:
在用上传上传多个文件后,可以对其多个文件打包,以提供给其他人zip文件下载
或者上传一个zip文件后,可以利用程序对其解压,以提供给其他人单个文件下载
很方便用户吧!我会在以后的文章里把这两种变化写出来!文中难免有疏漏的地方,请大家多多指正!


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


如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网