Solved

HOW TO COMPRESS A FOLDER USING VB

Posted on 2009-04-14
4
1,552 Views
Last Modified: 2012-05-06
HOW TO COMPRESS A FOLDER USING VB
0
Comment
Question by:megavannan
4 Comments
 
LVL 9

Accepted Solution

by:
asawatzki earned 250 total points
ID: 24137971
Here's a simple vbscript using WMI:

strComputer = "."
'Change strFolder to the folder path you want compressed.
strFolder = "C:\SomeFolder"

set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set objFolder = objWMI.Get("Win32_Directory='" & strFolder & "'")
objFolder.Compress
set objFolder = nothing
set objWMI = nothing
0
 
LVL 39

Expert Comment

by:abel
ID: 24138126
Looks as if this question is doubled. This seems the original question. The other question is: http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Studio_.NET_2005/Q_24320391.html
0
 
LVL 14

Assisted Solution

by:yehudaha
yehudaha earned 250 total points
ID: 24138128
if you ment compress by zip it

edit this line as you need, the first the folder to zip the second the zip path and file name

strSourceFolder = "C:\temp"
strDestinationZip = "C:\test.zip"

 

strSourceFolder = "C:\PowerTab"

strDestinationZip = "C:\test.zip"
 

arrResult = ZipFolder(strSourceFolder,strDestinationZip)

If arrResult(0) = 0 Then

    If arrResult(1) = 1 Then

        WScript.Echo "Done; 1 empty subfolder was skipped."

    Else

        WScript.Echo "Done; " & arrResult(1) & " empty subfolders were skipped."

    End If

Else

    WScript.Echo "ERROR " & Join( arrResult, vbCrLf )

End If
 
 

Function ZipFolder(myFolder,myZipFile)

' This function recursively ZIPs an entire folder into a single ZIP file,

' using only Windows' built-in ("native") objects and methods.

'

' Last Modified:

' October 12, 2008

'

' Arguments:

' myFolder   [string]  the fully qualified path of the folder to be ZIPped

' myZipFile  [string]  the fully qualified path of the target ZIP file

'

' Return Code:

' An array with the error number at index 0, the source at index 1, and

' the description at index 2. If the error number equals 0, all went well

' and at index 1 the number of skipped empty subfolders can be found.

'

' Notes:

' [1] If the specified ZIP file exists, it will be overwritten

'     (NOT APPENDED) without notice!

' [2] Empty subfolders in the specified source folder will be skipped

'     without notice; lower level subfolders WILL be added, wether

'     empty or not.

'

' Based on a VBA script (http://www.rondebruin.nl/windowsxpzip.htm)

' by Ron de Bruin, http://www.rondebruin.nl

'

' (Re)written by Rob van der Woude

' http://www.robvanderwoude.com
 

    ' Standard housekeeping

    Dim intSkipped, intSrcItems

    Dim objApp, objFolder, objFSO, objItem, objTxt

    Dim strSkipped
 

    Const ForWriting = 2
 

    intSkipped = 0
 

    ' Make sure the path ends with a backslash

    If Right( myFolder, 1 ) <> "\" Then

        myFolder = myFolder & "\"

    End If
 

    ' Use custom error handling

    On Error Resume Next
 

    ' Create an empty ZIP file

    Set objFSO = CreateObject( "Scripting.FileSystemObject" )

    Set objTxt = objFSO.OpenTextFile( myZipFile, ForWriting, True )

    objTxt.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )

    objTxt.Close

    Set objTxt = Nothing
 

    ' Abort on errors

    If Err Then

        ZipFolder = Array( Err.Number, Err.Source, Err.Description )

        Err.Clear

        On Error Goto 0

        Exit Function

    End If

    

    ' Create a Shell object

    Set objApp = CreateObject( "Shell.Application" )
 

    ' Copy the files to the compressed folder

    For Each objItem in objApp.NameSpace( myFolder ).Items

        If objItem.IsFolder Then

            ' Check if the subfolder is empty, and if

            ' so, skip it to prevent an error message

            Set objFolder = objFSO.GetFolder( objItem.Path )

            If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then

                intSkipped = intSkipped + 1

            Else

                objApp.NameSpace( myZipFile ).CopyHere objItem

            End If

        Else

            objApp.NameSpace( myZipFile ).CopyHere objItem

        End If

    Next
 

    Set objFolder = Nothing

    Set objFSO    = Nothing
 

    ' Abort on errors

    If Err Then

        ZipFolder = Array( Err.Number, Err.Source, Err.Description )

        Set objApp = Nothing

        Err.Clear

        On Error Goto 0

        Exit Function

    End If
 

    ' Keep script waiting until compression is done

    intSrcItems = objApp.NameSpace( myFolder  ).Items.Count

    Do Until objApp.NameSpace( myZipFile ).Items.Count + intSkipped = intSrcItems

        WScript.Sleep 200

    Loop

    Set objApp = Nothing
 

    ' Abort on errors

    If Err Then

        ZipFolder = Array( Err.Number, Err.Source, Err.Description )

        Err.Clear

        On Error Goto 0

        Exit Function

    End If
 

    ' Restore default error handling

    On Error Goto 0
 

    ' Return message if empty subfolders were skipped

    If intSkipped = 0 Then

        strSkipped = ""

    Else

        strSkipped = "skipped empty subfolders"

    End If
 

    ' Return code 0 (no error occurred)

    ZipFolder = Array( 0, intSkipped, strSkipped )

End Function

Open in new window

0

Featured Post

Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Hello again, all.  For those of you that have been following along, you'll know that this is my third article on this topic (though it is not Part III).  This article is sort of remedial, and probably the topic with which I should have started the s…
This is pretty cool.  The purpose of this VB Script is to help you document where JAR (Java ARchive) files and specifically java class files are located so that you can address issues seen with a client or that you can speak intelligently with a dev…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now