我正在编写一个VBScript来尝试将不同位置的多个目录压缩到同一个Zip文件中。
我正在使用的当前解决方案是迭代我想要压缩的目录(当前有2个),获取文件对象并使用copyHere方法将源文件夹复制到具有正确头文件的zip文件中格式。
这部分似乎工作正常,我遇到的困难是错误检查。我在网上找到的唯一两个解决方案是获取源目录和目标目录中的对象数,并在它们相同之前休眠,或检查zip文件是否打开以进行追加和休眠直到它为止。
第一个选项很容易使用一个目录,但是对于多个文件夹变得更加繁琐,更不用说Windows可能会在完成复制之前在目标目录中创建一个对象并且我正在压缩可能超过10 GB的文件以便解决方案不起作用。
我曾尝试实现第二个解决方案,但每次循环到第二次调用CopyHere时,它会告诉我zip文件在第一次迭代时已损坏。是不是可以将非常大的文件压缩到带有VBScript的zip?
关于如何使用VBScript进行压缩检查错误的任何其他建议将非常有用。
答案 0 :(得分:1)
这是使用Winrar的 rar.exe 命令行压缩文件夹的Function Create_WinRar_Archive(Source,Target_Archive,Password)
。
我们可以通过两种方式调用此函数:
如果您想创建一个没有密码的存档,我们就这样调用它:
Call Create_WinRar_Archive(Source,Target_Archive,"")
或者如果您想将此密码设置为此密码,我们将其称为:
Call Create_WinRar_Archive(Source,Target_Archive,Password)
以下是压缩图片文件夹
的示例Option Explicit
Dim ws,Source,Target_Archive,Password
Set ws = CreateObject("Wscript.Shell")
Source = ws.ExpandEnvironmentStrings("%userprofile%\pictures")
Target_Archive = "C:\BackupImages.rar"
Password = "123456"
Call Create_WinRar_Archive(Source,Target_Archive,Password)
Wscript.echo "All files are archived successfully !"
ws.run "Explorer " & Target_Archive
'******************************************************************************************************
Function Create_WinRar_Archive(Source,Target_Archive,Password)
'This function executes the command line
'version of WinRAR and reports whether
'the archive exists after WinRar exits.
'If it exists then it returns true. If
'not it returns an error message.
'------------------------------------------------------------------------------------
Dim oFSO,oShell,aScriptFilename,sScriptFilename
Dim sWorkingDirectory,ProgramFiles,sWinRarLocation
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("Wscript.Shell")
'--------Find Working Directory--------
aScriptFilename = Split(Wscript.ScriptFullName, "\")
sScriptFilename = aScriptFileName(Ubound(aScriptFilename))
sWorkingDirectory = Replace(Wscript.ScriptFullName, sScriptFilename, "")
'-------Ensure we can find Winrar.exe------
If oFSO.FileExists(sWorkingDirectory & " " & "Winrar.EXE") Then
sWinRarLocation = ""
ElseIf oFSO.FileExists(oShell.ExpandEnvironmentStrings("%ProgramFiles%\Winrar\rar.exe")) Then
sWinRarLocation = oShell.ExpandEnvironmentStrings("%programfiles%\Winrar\")
ElseIf oFSO.FileExists(oShell.ExpandEnvironmentStrings("%ProgramFiles(x86)%\Winrar\rar.exe")) Then
sWinRarLocation = oShell.ExpandEnvironmentStrings("%programfiles(x86)%\Winrar\")
Else
Create_WinRar_Archive = "Error: Couldn't find Winrar.EXE"
Exit Function
End If
'--------------------------------------
'The Command "A" Means ==> add to archive
'To create a WinRar file with the specified name after command A (archive) and the switches -ep1 (exclude base directory from names) and -r (recursive)
If Password = "" Then
oShell.Run """" & sWinRarLocation & "rar.exe"" A -ep1 -r """ & _
Target_Archive & """ """ & Source & """",0,True
Else
'The -hp<password> switch: To use a password
oShell.Run """" & sWinRarLocation & "rar.exe"" A -ep1 -r -hp"&Password&" """ & _
Target_Archive & """ """ & Source & """",0,True
End If
If oFSO.FileExists(Target_Archive) Then
Create_WinRar_Archive = 1
Else
Create_WinRar_Archive = "Error: Creating archives failed !"
MsgBox Create_WinRar_Archive,16,Create_WinRar_Archive
End If
End Function
'****************************************************************************************************