如何使用VBScript读取.zip文件的内容而不实际提取文件?

时间:2011-01-18 12:39:01

标签: vbscript zip

我有一个以父目录开头的.zip文件。我需要从文件中读取该dir,然后搜索我的HD以查看该dir名称是否已存在。如果它存在,我然后删除它并将其替换为.zip文件的内容。

除了在没有实际解压缩文件的情况下读取.zip,我才能做到这一切。

.zip文件的大小可以超过2G,所以我想避免解压缩,然后读取目录,然后复制。

我不直接解压缩到该位置并强制覆盖的原因是,由于某种原因,当使用CopyHere方法解压缩时,它忽略了通常会强制覆盖的开关,并仍然提示用户,如果他们想要覆盖。

解压缩文件的代码:

 Set objSA = CreateObject("Shell.Application")
 Set objSource = objSA.NameSpace(pathToZipFile).Items ()
 Set objTarget = objSA.NameSpace(extractTo)     

 objTarget.CopyHere objSource,4

4 个答案:

答案 0 :(得分:1)

这是关于SO的类似问题 How to list the contents of a .zip folder in c#?

我自己用过这个图书馆。它运行良好,http://dotnetzip.codeplex.com/,甚至还有一个树视图示例,可以在不提取的情况下读取zip。

您将需要服务器上的DLL,但我不会说您必须安装它们。 ;)

答案 1 :(得分:0)

我不确定是否可以在不提取拉链的情况下读取zip的内容。

如果您只是想避免对数据进行耗时的复制操作,可以尝试解压缩到临时目录,然后使用“移动”功能。移动通常比复制耗时少,因为它实际上不会重写磁盘上的数据。它只是更新文件系统以指向数据所在的位置。

答案 2 :(得分:0)

假设您可以使用外部应用程序,请尝试下载7Zip,然后让脚本使用-l开关执行它。这应该会给你一些你应该能够以某种方式解析的输出。

帮助文件中的示例:7z l archive.zip

答案 3 :(得分:0)

您可以在For Each对象上使用objSource,例如:

Dim objSA, objSource, item
Set objSA = CreateObject("Shell.Application")
Set objSource = objSA.NameSpace(pathToZipFile).Items ()
For Each item in objSource
    WScript.Echo item
Next