注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

使用Window自带的ZIP命令来进行文件或文件夹的压缩  

2017-04-11 10:10:54|  分类: 操作系统 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
如果不装压缩软件的话,通常我们都是将文件发送到C:\Documents and Settings\root\SendTo\压缩(zipped)文件夹这个功能来进行压缩,但是如果仔细察看的话,这个仅是一个Explorer shell command,不是一个可执行程序,所以正常情况下是无法通过在cmd中直接调用的。有人会说,不是还有一个makecab命令吗?这个虽然也是可以直接压缩文件的,只是这压缩的格式Cab放到其它系统上可未必好使,难不成我们还需要将expand命令也移植到其它系统来解压Cab文件吗?
所以思路还是转回来,既然无法直接调用ZIP命令来压缩,那就换个思路间接调用,通过VSB脚本调用COM接口,从而调用Window自带的zip功能。有这样的想法自然是正确的,因为SCript.exe从Windows98开始就默认安装了,所以此路可行。
编写VBS脚本,zip.vbs内容如下:

Set objArgs = WScript.Arguments
REM 开始压缩文件,默认压缩文件名跟输入文件同名
For Each s In objArgs
Zip s
Next
Msgbox "OK"
Sub Zip(ByVal mySourceDir)
REM 根据是文件还是目录走不同的流程
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
If fso.FolderExists(mySourceDir) Then
REM 压缩目录
Set objSource = objShell.NameSpace(mySourceDir)
Set objFolderItem = objSource.Items()
REM 生成要生成的ZIP文件名
ZipFile =mySourceDir&".zip"
ElseIf fso.FileExists(mySourceDir) Then
REM 压缩文件
FileName = fso.GetFileName(mySourceDir)
FolderPath = Left(mySourceDir, Len(mySourceDir) - Len(FileName))
Set objSource = objShell.NameSpace(FolderPath)
Set objFolderItem = objSource.ParseName(FileName)
REM 获取输入的文件名后辍
arr = Split(mySourceDir,".")
FileExt = arr(Ubound(arr))
REM 生成要生成的ZIP文件名
ZipFile = Left(mySourceDir, Len(mySourceDir) - Len(FileExt))&"zip"
End If
Set f = fso.CreateTextFile(ZipFile, True)
f.Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
f.Close
Set objTarget = objShell.NameSpace(ZipFile)
objTarget.CopyHere objFolderItem, 256
Do
REM 必须的,如果文件比较大,这个数字还要上调
WScript.Sleep 1000
Loop Until objTarget.Items.Count > 0
REM 销毁变量
Set objShell = Nothing
Set objFolderItem = Nothing
Set objSource = Nothing
Set fso = Nothing
End Sub

保存好以上文件,想要压缩文件或文件夹成ZIP,都可以直接拖动到这个zip.vbs文件上即可。这里需要注意下,如果文件内容过多过大,请调整WScript.Sleep 1000这行,把1000这个数字再加大。如果想要静默压缩,请却除Msgbox "OK"这行。
压缩的效果如下图所示。
使用Window自带的ZIP命令来进行文件或文件夹的压缩 - sinsunson - 天朝布衣田中码农参上
 
默认生成的压缩包文件名跟原文件同名,只是后辍变为zip。如果需要自行生成压缩包文件名,也请自行修改代码。
 
  评论这张
 
阅读(2)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017