我正在尝试使用VBScript检查数百个.zip文件的内容。基本上我想要做的是运行每个.zip并找到该zip文件的所有文件。对于zip中的每个文件,我想将一些有关它的信息记录到Oracle数据库中。该信息是:文件名和文件修改日期。
到目前为止,我的解决方案已经将每个zips文件夹结构提取到临时文件夹,然后使用fso对象在temp文件夹中运行。然而,事实证明这是非常缓慢的。
有没有办法在不解压缩zip文件的情况下实现这个目标?
答案 0 :(得分:0)
我为你做了一些谷歌搜索。我确实找到了这个:http://www.example-code.com/vbscript/zip_List.asp奇尔卡特做了很多我认为不可能的事情。这让我印象深刻 - 你要做的事情不会是无痛的。
如果遇到问题,我会找到与vbscript不同的解决方案。但如果你拉开它,我会投票给你成为vb land的市长
答案 1 :(得分:0)
您可以使用Shell Objects完成此操作。但也许会慢一点。如果只是名称和日期资源管理器可以从zip目录直接获取它(在文件的末尾,所以仍然需要读取整个文件)。
这会将文件夹中的项目复制到另一个文件夹。 zip文件是一个文件夹,因此它将被复制并复制出来。
To 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相反)
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"
创建空白zip。 (我应该使用ADODB二进制流而不是FSO文本流,但它不应该重要)
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