Solved

HOW TO COMPRESS A FOLDER USING VB

Posted on 2009-04-14
4
1,558 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Welcome back!  My apologies for taking so long to write part two of this series; it's been a long time coming!  As I promised in Part 1, this article will focus on how to locate those elusive AD properties that you are searching for.  Why is this us…
Welcome, welcome!  If you are new to the series and haven't been following along, please take a brief moment to review the first three installments: Part 1 (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/A_266-VBScri…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
This is a video describing the growing solar energy use in Utah. This is a topic that greatly interests me and so I decided to produce a video about it.

914 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

12 Experts available now in Live!

Get 1:1 Help Now