.VBS called by .BAT to create .zip - run silently (without interface)?

Viewed 402

I have a .bat file which I use to back up files, which calls a .vbs and passes it two parameters, as follows:

...
ZipCMD.vbs "C:\Source" "C:\Destination\Data.zip"
...

ZipCMD.vbs contains the following code (Credit to garbb):

Set objArgs = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
InputFolder = FS.GetAbsolutePathName(objArgs(0))
ZipFile = FS.GetAbsolutePathName(objArgs(1))

CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)

Set objShell = CreateObject("Shell.Application")
Set source = objShell.NameSpace(InputFolder).Items

numfolderitems = objShell.NameSpace(InputFolder).Items.count

objShell.NameSpace(ZipFile).CopyHere(source)

' wait until number of items in zip file is the same as in the folder we are zipping up
' also sometimes gets errors when getting folder object for zip file, probably because it is in use? so ignore these
On Error Resume Next
Do while True
    numitemsinzip = objShell.NameSpace(ZipFile).Items.count
    If Err.Number = 0 and numitemsinzip = numfolderitems Then
        Exit Do
    ElseIf Err.Number <> 0 then
        Err.Clear
    End If
    wScript.Sleep 10
Loop
On Error Goto 0

When the zipping is occurring, the usual windows 'Compressing files' interface appears, and shows the progress bar ticking along for a few minutes, before closing and disappearing.

Question: Can vbs run a compression silently (i.e. without interface)? -- I've read this article, which shows a flag, however this doesn't appear to work with copying to .zip, for some reason.

Follow-up question: If it's not possible for the .vbs which I'm using to achieve this, then is there an alternative way, which still utilises calling another file/process(?) (.vbs / .js, or other?) and feeding it the two paths from cmd?

Edit: I'm trying to achieve this without the use of third-party software (e.g. 7zip), and simply using native windows code.

1 Answers

Suppose I am almost 3 months late on this, but if you have powershell version 5 or later, you can simply create a powershell script:

Compress-Archive "C:\Source" "C:\Destination\Data.zip"

or from a batch file:

powershell Compress-Archive "C:\Source" "C:\Destination\Data.zip"

Also see this option

Related