Tengo un archivo por lotes que genera un archivo de texto. Pensé que sería bueno si pudiera cerrarlo también.
Esto se usará en un entorno no controlado, por lo que no puedo hacer suposiciones sobre la presencia de productos de software de terceros como 7-Zip , etc. Esto necesita usar la capacidad ahora incorporada de Windows para comprimir archivos.
windows
command-line
batch
zip
Aaron Bush
fuente
fuente
powershell.exe Compress-Archive file-to-zip.txt zippedfile.zip
(también funciona con la carpeta)Respuestas:
Aquí hay una solución de archivo por lotes (una variación de mi otra respuesta) que comprimirá un archivo llamado
c:\ue_english.txt
y lo colocaráC:\someArchive.zip
:Se requiere acceso de escritura al padre de la carpeta almacenada en
TEMPDIR
. Como este no suele ser el caso, la raíz de la unidad CTEMPDIR
puede tener que cambiarse.También se requiere acceso de escritura para la carpeta en la que se
.bat
encuentra el script (ya que genera un archivo allí).Además, tenga en cuenta que la extensión del archivo comprimido debe ser
.zip
. Los intentos de usar otra extensión pueden provocar un error de script. En su lugar, genere el.zip
archivo y cámbiele el nombre.fuente
write-zip
cmdlet que se puede descargar desde Pscx .TEMPDIR
? Creo que su intención es envolver el archivoFILETOZIP
en una carpeta, ¿verdad?Que es posible comprimir archivos sin necesidad de instalar ningún software adicional (he probado). La solucion es:
Ejecute esto en una ventana de línea de comandos para crear un archivo ZIP llamado que
C:\someArchive.zip
contenga todos los archivos en la carpetaC:\test3
:Donde el archivo
zip.vbs
contiene:No lo he probado para rutas y nombres de archivos que contienen espacios. Puede funcionar si las comillas se colocan alrededor de los parámetros de la línea de comando.
Cómo funciona: la funcionalidad zip incorporada en Windows (Windows XP y posterior) se expone a través de las interfaces COM desde el shell de Windows, explorer.exe, que es la parte "Shell.Application". Esta interfaz COM se puede usar desde un script VBScript porque dicho script puede acceder a los componentes COM. Para hacer que el script sea completamente autónomo, crea un archivo ZIP vacío para comenzar (también se podría crear un archivo ZIP vacío y copiarlo al sistema de destino junto con el script VBScript).
VBScript se ha instalado de manera predeterminada 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 manera predeterminada en Windows 98 y versiones posteriores de Windows. También se instala si está instalado Internet Explorer 5 (o una versión posterior).fuente
Si está abierto a usar PowerShell , las capacidades zip están disponibles en .NET 2.0 (PowerShell es .NET). Aquí hay un ejemplo ( fuente ) de crédito para Mike Hodnick :
fuente
Puede eliminar el riesgo de tiempo de espera durante la compresión al sondear la existencia de la ventana de diálogo de compresión. Este método también maneja la cancelación del usuario fuera de la ventana de compresión.
fuente
.Sleep(whatever)
" mono me enferman.Si puede instalar las herramientas del Kit de recursos , encontrará una herramienta de línea de comandos llamada COMPRESS que puede crear archivos comprimidos como zip.
fuente
fuente
objShell.NameSpace( ZipFile ).Items.Count
dentro del bucle, siempre es 0 a pesar de que se crea el archivo zip y tiene el contenido esperado dentro ...Múltiples archivos / directorios con código simplificado.
archivo zip.vbs
fuente
Esta es una mutación de la respuesta aceptada. Hago un montón de tareas de automatización en hasta miles de archivos a la vez, por lo que no puedo dormir durante 2 segundos y no me importa. Obtuve la solución alternativa aquí , que también es similar a la respuesta de Jiří Kočara aquí .
Esto hará que la carpeta de destino se pinche cada 200 ms, que es aproximadamente tan rápido como Microsoft dice que busque actualizaciones de FS.
fuente
Aquí está mi intento de resumir las ventanas de capacidades incorporadas para compresión y descompresión: https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders -with-batch-f
con algunas soluciones dadas que deberían funcionar en casi todas las máquinas con Windows.
En lo que respecta a la aplicación shell.y WSH, preferí el jscript ya que permite un archivo híbrido por lotes / jscript (con extensión .bat) que no requiere archivos temporales. He puesto capacidades de descompresión y compresión en un archivo más algunas características más .
fuente
Si en Windows 8 o Windows Server 2012 tendrá PowerShell y .NET 4.5 para que pueda hacer esto:
zip.ps1 (uso :)
-directory <directory to zip up> -name <zip name>
:zip.bat (si necesita un ayudante para llamar a PowerShell por usted, el directorio es el primer argumento y el nombre zip segundo):
fuente
Windows 10 build 17063 o posterior se incluye con tar.exe, que es capaz de trabajar con zip desde la línea de comandos.
o para crear un archivo
fuente
La línea de comandos de Windows ahora proporciona el comando compacto que, por lo que puedo decir, es nativo de Windows. Eso debería cumplir con los requisitos solicitados a menos que me haya perdido algo.
fuente
compact
existía desde XP y es una herramienta para administrar la compresión NTFS