压缩大文件夹失败



我正在尝试存档日志以捕获间歇性错误,其中我的日志经常被覆盖。我希望存档日志以确保捕获所需的事件。

我已经编写了似乎是功能代码来执行此操作,但是如果文件夹非常大,则zip将失败。如果我将其指向较小的目录,它可以正常工作。没有生成任何错误,我将不胜感激任何帮助来确定原因。

由于我以前从未在 VBS 中编程过,如果这似乎是一个简单的问题,我

提前道歉。
Option Explicit 
dim objFSO, objFolder, FolderToZip, ziptoFile 
dim ShellApp, eFile, oNewZip, strZipHeader 
dim ZipName, Folder, i, Zip 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("D:Program Filesafolder") 

Wscript.Sleep 2000 
Set oNewZip = objFSO.OpenTextFile("C:Archivelogs_" & day(date) & month(Date) & Year(date)& ".zip", 8, True) 
strZipHeader = "PK" & Chr(5) & Chr(6) 
For i = 0 to 17 
 strZipHeader = strZipHeader & Chr(0) 
Next 
oNewZip.Write strZipHeader 
oNewZip.Close 
Set oNewZip = Nothing 
WScript.Sleep 5000 
FolderToZip = "D:Program Filesafolder" 
ZipToFile = "C:Archivelogs_" & day(date) & month(Date) & Year(date)& ".zip"
Set ShellApp = CreateObject("Shell.Application") 
Set Zip= ShellApp.NameSpace(ZipToFile) 
Set Folder= ShellApp.NameSpace(FolderToZip) 
Zip.CopyHere(FolderToZip) 
WScript.Sleep 2000 

你的代码比它需要的要复杂一些,但它原则上是有效的。导致您在使用大文件夹时遇到的故障是最后固定的 2 秒延迟:

WScript.Sleep 2000

CopyHere异步运行,这意味着它在脚本继续的同时在后台运行。但是,在延迟 2 秒后,脚本将终止(以及使用它的Shell.Application实例),无论CopyHere是否已完成。当您有大量/大文件时,处理可能需要 2 秒以上。

这就是为什么您的脚本适用于小文件夹,但不适用于大文件夹。当脚本在 2 秒后终止时,复制根本没有完成。

为避免这种情况,请将固定延迟替换为将已处理文件数与文件总数进行比较的检查:

Set fso = CreateObject("Scripting.FileSystemObject")
Set app = CreateObject("Shell.Application")
zipfile = "C:Templogs_" & Day(Date) & Month(Date) & Year(Date) & ".zip"
fldr    = "C:Tempsample"
cnt     = fso.GetFolder(fldr).Files.Count
'create a new empty zip file
fso.OpenTextFile(zipfile, 2, True).Write "PK" & Chr(5) & Chr(6) _
  & String(18, Chr(0))
'start copying the files from the source folder to the zip file
Set zip = app.NameSpace(zipfile)
zip.CopyHere app.NameSpace(fldr).Items     '<- runs asynchronously!
'wait for CopyHere to finish
Do
  WScript.Sleep 100
Loop Until zip.Items.Count = cnt

最新更新