我正在尝试在VBScript中压缩文件夹,但它似乎无法正常工作。我确定我正在正确创建头文件。
它正确创建了实际文件,但没有压缩文件夹。
任何人都有任何想法:
Sub ArchiveFolder (folder)
Dim fso, wShell, sApp, zipFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set wShell = CreateObject("WScript.Shell")
Set sApp = CreateObject("Shell.Application")
Set zipFile = fso.CreateTextFile(folder & ".zip")
' Write zip file header.
zipFile.Write "PK" & Chr(5) & Chr(6) & String(18, 0)
zipFile.Close
sApp.NameSpace(folder & ".zip").CopyHere folder
End Sub
答案 0 :(得分:11)
我找到答案here。神奇的是在最后Do..Loop
,脚本在那里等待Shell执行它。
ArchiveFolder "sub\foo.zip", "..\baz"
Sub ArchiveFolder (zipFile, sFolder)
With CreateObject("Scripting.FileSystemObject")
zipFile = .GetAbsolutePathName(zipFile)
sFolder = .GetAbsolutePathName(sFolder)
With .CreateTextFile(zipFile, True)
.Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0))
End With
End With
With CreateObject("Shell.Application")
.NameSpace(zipFile).CopyHere .NameSpace(sFolder).Items
Do Until .NameSpace(zipFile).Items.Count = _
.NameSpace(sFolder).Items.Count
WScript.Sleep 1000
Loop
End With
End Sub
答案 1 :(得分:1)
检查你的论点。 folder
必须是要放入zip文件的对象的路径。如果它是文件夹对象,则必须使用folder.Path
,因为文件夹对象的默认方法是Name
,而CopyHere
找不到仅具有名称的对象。
您可以在函数中添加一些调试语句来检查:
WScript.Echo TypeName(folder)
If fso.FolderExists(folder) Then
WScript.Echo folder & " exists."
Else
WScript.Echo folder & " doesn't exist."
End If
答案 2 :(得分:0)
您可以通过%comspec%
调用外部zip文件 oShell.Run "%comspec% /c c:\windows\7za.exe a " & oFile &".zip " & oFile & " -tzip",,True
来源http://www.scriptlook.com/zip-large-files-in-a-directory-2/