Es posible comprimir archivos sin necesidad de instalar ningún software adicional (lo he probado). La solución es:
Ejecute esto en una ventana de línea de comandos para crear un archivo ZIP llamado C:\someArchive.zip
que contenga todos los archivos de la carpeta C:\test3
:
CScript zip.vbs C:\test3 C:\someArchive.zip
Donde el archivo zip.vbs
contiene:
' Get command-line arguments.
Set objArgs = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
InputFolder = FS.GetAbsolutePathName(objArgs(0))
ZipFile = FS.GetAbsolutePathName(objArgs(1))
' Create an empty ZIP file.
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
objShell.NameSpace(ZipFile).CopyHere(source)
' Required to let the ZIP command execute
' If this script randomly fails or the ZIP file is not complete,
' just increase to more than 2 seconds
wScript.Sleep 2000
No lo he probado en cuanto a rutas y nombres de archivos que contengan espacios. Puede funcionar si se ponen comillas alrededor de los parámetros de la línea de comandos.
Cómo funciona: la funcionalidad zip incorporada en Windows (¿Windows XP y posterior?) se expone a través de las interfaces COM del shell de Windows, explorer.exe - es decir, la parte “Shell.Application”. Este interfaz COM puede ser usado desde un script VBScript porque tal script puede acceder a los componentes COM. Para que el script sea completamente autónomo, crea un archivo ZIP vacío para empezar (también se puede crear un archivo ZIP vacío y copiarlo al sistema de destino junto con el script VBScript).
VBScript ha sido instalado por defecto en cada versión de escritorio de Microsoft Windows desde Windows 98.
CScript.exe
es parte de Windows Script Host . Windows Script Host se distribuye e instala de forma predeterminada en Windows 98 y versiones posteriores de Windows. También se instala si se instala Internet Explorer 5 (o una versión posterior).