使用VBScript检查zip文件中文件的属性

使用VBScript检查zip文件中文件的属性,vbscript,zip,fso,Vbscript,Zip,Fso,我正在尝试使用VBScript检查几百个.zip文件的内容。基本上,我想做的是遍历每个.zip文件,找到该zip文件中的所有文件。对于zip中的每一个文件,我想将有关它的一些信息记录到Oracle数据库中。该信息为:文件名和文件修改日期 到目前为止,我的解决方案是将每个zips文件夹结构提取到一个临时文件夹,然后使用一个fso对象在临时文件夹中运行。然而,这已经被证明是非常缓慢的 有没有一种方法可以在不解压缩zip文件的情况下实现这一点?哎哟,伙计。我从未听说过vbscript zip对象。但是

我正在尝试使用VBScript检查几百个.zip文件的内容。基本上,我想做的是遍历每个.zip文件,找到该zip文件中的所有文件。对于zip中的每一个文件,我想将有关它的一些信息记录到Oracle数据库中。该信息为:文件名和文件修改日期

到目前为止,我的解决方案是将每个zips文件夹结构提取到一个临时文件夹,然后使用一个fso对象在临时文件夹中运行。然而,这已经被证明是非常缓慢的


有没有一种方法可以在不解压缩zip文件的情况下实现这一点?

哎哟,伙计。我从未听说过vbscript zip对象。但是我已经很久没有做vbscript了。你有什么办法可以避免吗

我帮你搜索了一下。我确实发现了这一点:奇尔卡特做了很多我认为不可能的事情。这给我的印象是,你所做的并不是无痛的


如果给你的问题,我会找到一个不同的解决方案比vbscript。但是如果你成功的话,我会投票支持你成为vb土地的市长,你可以用Shell对象就地完成。但可能也会一样慢。如果只是名称和日期,资源管理器可以直接从zip目录获取它(在文件末尾,所以仍然需要读取整个文件)

这会将文件夹中的项目复制到另一个文件夹。zip文件是一个文件夹,因此它可以进行复制

拉链

Set objShell = CreateObject("Shell.Application")
Set Ag=Wscript.Arguments
set WshShell = WScript.CreateObject("WScript.Shell")

Set SrcFldr=objShell.NameSpace(Ag(1))
Set DestFldr=objShell.NameSpace(Ag(0))
Set FldrItems=SrcFldr.Items
DestFldr.CopyHere FldrItems, &H214
Msgbox "Finished"
解压缩(注意SrcFolder和DestFolder是反向的)

创建一个空白的zip文件。(我应该使用ADODB二进制流而不是FSO文本流,但这不重要)


是的,我不认为这是最简单的任务。我看到其他一些stackoverflow答案提到使用命令行“-l”列出zip的内容。但我不确定这到底是怎么回事,我用cygwin/bash代替dos/command-line。它有一个程序,列出它的zip内容。其输出为:“11805 08-26-2013 12:02 temp bin/shutdown.exe”。每个文件都有一行。该程序的名称是(等待…“解压”。PKware开发了zip文件。在和(如果在32位窗口上)可能有重复的命令行实用程序
Set objShell = CreateObject("Shell.Application")
Set Ag=Wscript.Arguments
set WshShell = WScript.CreateObject("WScript.Shell")

Set DestFldr=objShell.NameSpace(Ag(1))
Set SrcFldr=objShell.NameSpace(Ag(0))
Set FldrItems=SrcFldr.Items
DestFldr.CopyHere FldrItems, &H214
Msgbox "Finished"
Set Ag=Wscript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(Ag(0), 8, vbtrue)
BlankZip = "PK" & Chr(5) & Chr(6)
For x = 0 to 17
    BlankZip = BlankZip & Chr(0)
Next
ts.Write BlankZip