无法使用VBScript压缩1 GB文件

无法使用VBScript压缩1 GB文件,vbscript,batch-file,windows-server-2008-r2,Vbscript,Batch File,Windows Server 2008 R2,我有一个执行以下任务的批处理脚本。 1.创建备份文件夹 2.将特定文件压缩为.log格式的文本文件,并将压缩后的文件移动到备份文件夹 3.移动后删除原始文件 为了完成第二个任务,我将从下面的批处理脚本将命令写入VBScript文件,然后在批处理脚本结束时执行VBScript echo Option Explicit >> zipIt.vbs REM remaining commands CScript zipIt.vbs 批处理脚本成功地为大小为100 MB的文件执行所有3项任务。

我有一个执行以下任务的批处理脚本。 1.创建备份文件夹 2.将特定文件压缩为.log格式的文本文件,并将压缩后的文件移动到备份文件夹 3.移动后删除原始文件

为了完成第二个任务,我将从下面的批处理脚本将命令写入VBScript文件,然后在批处理脚本结束时执行VBScript

echo Option Explicit >> zipIt.vbs
REM remaining commands
CScript zipIt.vbs
批处理脚本成功地为大小为100 MB的文件执行所有3项任务。 但对于大小为1 GB的文件,VBScript命令失败。在命令提示下引发以下错误

C:\Users\Administrator\Desktop\zipIt.vbs(18, 1) Microsoft VBScript runtime error
: Permission denied
以下是zipIt.vbs的书面行号内容,以方便阅读

1. Option Explicit 
2. Dim FileToZip, Result 
3. Dim oShell 
4. Dim file 
5. Dim oFileSys 
6. Dim winShell 
7. FileToZip = "C:\Program Files\logs\File_2013-04-29.log" 
8. Result = "C:\Program Files\logs\File_2013-04-29.log.zip" 
9. Set oShell = CreateObject("WScript.Shell") 
10. Set oFileSys = CreateObject("Scripting.FileSystemObject") 
11. Set file = oFileSys.CreateTextFile(Result, True) 
12. file.Write "PK" & Chr(5) & Chr(6) & String(18, 0) 
13. file.Close 
14. Set file = nothing 
15. set winShell = createObject("shell.application") 
16. winShell.namespace(Result).CopyHere FileToZip 
17. wScript.Sleep(5000) 
18. oFileSys.DeleteFile FileToZip

如果VBScript单独运行,则会出现相同的错误。是因为文件太大吗?

这肯定是内存的问题,因为应用程序的最大容量限制为2GB,至少在windows中,很可能是程序试图访问未分配的内存的问题。

替代解决方案

将大型日志文件拆分为小块:

BreakFile = "C:\Users\Administrador\Desktop\Test.txt"
limit = 400000 ' Bytes

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(Breakfile, 1)

FiletoSplit = objFSO.GetFileName(BreakFile)
FolderDest = Mid(objFSO.GetAbsolutePathName(BreakFile),1,Len(objFSO.GetAbsolutePathName(BreakFile))-(Len(FiletoSplit)))
FileSplitName = objFSO.GetBaseName(BreakFile)
dtmStart = Now()

Set objFile = objFSO.OpenTextFile(Breakfile, 1)
strContents = objFile.ReadAll
FileNum = 1
fname = FolderDest & FileSplitName & "Split " & FileNum & ".txt"
Set objFile1 = objFSO.OpenTextFile(fname, 2, True)
CountLines = 0
arrLines = Split(strContents, vbCrLf)
HeaderText = arrLines(0)

For i = 0 to ubound(arrlines)
    strLine = arrLines(i) & vbCrLf
    objFile1.Write strLine
    If (Countlines) < limit Then
        countlines = countlines + 1
    ElseIf Countlines >= limit Then
        objFile1.Close
        Countlines = 0
        FileNum = FileNum + 1
        fname = FolderDest & FileSplitName & "Split " & FileNum & ".txt"
        Set objFile1 = objFSO.OpenTextFile(fname, 2, True)
        objFile1.Write HeaderText & vbCrLf
    End If
Next

objFile.Close
dtmEnd = Now()

VBScript只是创建一个空的zip文件,即文件_2013-04-29.log.zip,但它无法添加.log文件并删除原始文件。有没有办法克服此限制?有办法将其扩展到3GB,但我非常确定这需要win32 api访问。由于操作系统的限制,这是不可能的。我的要求是,对于大小高达1GB的文件,要有VBScript的压缩功能。是否可以单独修改VBScript?理论上,您可以修改脚本,使其一次只在文件的一小部分中运行。这样,您就可以控制使用了多少内存。我无法修改脚本来实现上述逻辑,因为我对VBScript的知识有限。增加睡眠时间怎么样?例如,在WScript.Sleep10000中,对于200MB的文件大小,脚本工作正常。刚刚试过。我会试试你的解决方案。但到目前为止,我将坚持我前面提到的:根据大小增加睡眠时间。非常感谢Elektro。
Copy /B "MyLog_Part*" "MyLog_Complete.log"