2017-07-08 29 views
1

我正在寫一個VBScript來嘗試將不同位置的多個目錄壓縮到同一個Zip文件中。我怎樣才能確保一個非常大的zip文件壓縮完成?

我正在使用的當前解決方案是迭代我想壓縮的目錄(其中當前有2個),獲取文件對象並使用copyHere方法將源文件夾複製到一個zip文件中頭格式。

這部分似乎工作正常,我遇到的困難是與錯誤檢查。我在網上找到的唯一兩個解決方案是獲取源目錄和目標目錄中的對象的數量,並進行睡眠,直到它們相同,或檢查壓縮文件是否打開以便追加和睡眠直到它爲止。

第一個選項對於一個目錄很容易,但對於多個文件夾變得更乏味,更不用說Windows可能會在完成複製之前在目標目錄中創建一個對象,並且我正在壓縮超過10 GB的文件該解決方案將無法工作。

我曾嘗試實現第二個解決方案,但每次循環到達第二次調用CopyHere時,它都會告訴我該zip文件已從第一次迭代中損壞。用VBScript壓縮非常大的文件到壓縮文件是不可能的?

任何其他建議,如何我可以錯誤檢查壓縮完成使用VBScript將是非常有益的。

+0

至少有[這裏](http://stackoverflow.com/questions/20009033/is-there-a-size-limit-for-a-配拉鍊尺寸以上2GB/4GB記錄的問題zip-file-using-copyhere-in-vbscript)和[這裏](https://stackoverflow.com/questions/37411326/limiting-zip-file-size) – LotPings

回答

1

這是一個Function Create_WinRar_Archive(Source,Target_Archive,Password)來壓縮文件夾rar.exe Winrar的命令行。 我們可以通過兩種方式調用這個函數:

如果你想創建一個不帶密碼的存檔,所以我們通過這種方式把它稱爲:

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 
'**************************************************************************************************** 
相關問題