¿Es posible crear un archivo zip usando PowerShell?
powershell
zip
archive
Valentin Vasilyev
fuente
fuente
Respuestas:
Si te diriges a CodePlex y tomas las Extensiones de comunidad de PowerShell , puedes usar su
write-zip
cmdlet.Ya que
puedes ir a la galería de PowerShell .
fuente
write-zip [input file/folder] [output file]
Una alternativa pura de PowerShell que funciona con PowerShell 3 y .NET 4.5 (si puede usarlo):
Simplemente pase la ruta completa al archivo zip que desea crear y la ruta completa al directorio que contiene los archivos que desea comprimir.
fuente
PowerShell v5.0 agrega
Compress-Archive
yExpand-Archive
cmdlets. Las páginas vinculadas tienen ejemplos completos, pero lo esencial es:fuente
Compress-Archive
Descripción: "... el tamaño máximo de archivo que puede comprimir usando Compress-Archive es actualmente de 2 GB. Esto es una limitación de la API subyacente" Sin embargo, si lo usaSystem.IO.Compression.ZipFile
, puede omitir esta limitación.System.IO.Compression.ZipFile
. Si el marco .NET que está utilizando no tiene este límite, CmdLet no debería alcanzar este límite. Lo verifiqué en el código.-OutputPath
parámetro.Una forma nativa con el último framework .NET 4.5, pero completamente sin características:
Creación:
Extracción:
Como se mencionó, totalmente sin características, así que no esperes una marca de sobrescritura .
ACTUALIZACIÓN: Vea a continuación otros desarrolladores que se han expandido en esto a lo largo de los años ...
fuente
Instale 7zip (o descargue la versión de línea de comando en su lugar) y use este método de PowerShell:
Puedes llamarlo así:
fuente
& "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
El lote ha cambiado desde que se publicó la respuesta inicial. Estos son algunos de los últimos ejemplos que utilizan el comando Compress-Archive .
Comando para crear un nuevo archivo
Draft.zip
comprimido comprimiendo dos archivosDraftdoc.docx
ydiagram2.vsd
especificado por elPath
parámetro. El nivel de compresión especificado para esta operación es Óptimo.Comando para crear un nuevo archivo comprimido,
Draft.zip
al comprimir dos archivosDraft doc.docx
yDiagram [2].vsd
, especificado por elLiteralPath
parámetro. El nivel de compresión especificado para esta operación es Óptimo.Comando para crear un nuevo archivo comprimido,,
Draft.zip
en laC:\Archives
carpeta. El nuevo archivo contiene todos los archivos de la carpeta C: \ Reference , porque se utilizó un carácter comodín en lugar de nombres de archivo específicos en el parámetro Path .Command crea un archivo de una carpeta completa,
C:\Reference
PowerShell agrega la
.zip
extensión al nombre del archivo automáticamente.fuente
Editar dos : este código es un feo, feo kluge de antaño. No lo quieres.
Esto comprime el contenido de
.\in
a.\out.zip
con System.IO.Packaging.ZipPackage siguiendo el ejemplo aquíEditar: No confiable para archivos más grandes, tal vez> 10mb, YMMV. Algo relacionado con la evidencia de dominio de aplicación y el almacenamiento aislado. El enfoque más amigable .NET 4.5 funciona bien desde PS v3, pero quería más memoria en mi caso. Para usar .NET 4 de PS v2, los archivos de configuración necesitan un ajuste no compatible .
fuente
Dando a continuación otra opción. Esto comprimirá una carpeta completa y escribirá el archivo en una ruta determinada con el nombre.
Requiere .NET 3 o superior
fuente
Aquí hay una solución nativa para PowerShell v5, usando el cmdlet
Compress-Archive
Creación de archivos Zip usando PowerShell .Consulte también Microsoft Docs para Compress-Archive .
Ejemplo 1:
Ejemplo 2
Ejemplo 3
fuente
Para la compresión, usaría una biblioteca (7-Zip es bueno, como sugiere Michal ).
Si instala 7-Zip , el directorio instalado contendrá
7z.exe
la aplicación de consola.Puede invocarlo directamente y usar cualquier opción de compresión que desee.
Si desea participar con la DLL, eso también debería ser posible.
7-Zip es un programa gratuito y de código abierto.
fuente
¿Qué hay de
System.IO.Packaging.ZipPackage
?Requeriría .NET 3.0 o superior.
a través de Anders Hesselbom
fuente
¿Por qué nadie mira la documentación? Hay un método compatible para crear un archivo zip vacío y agregar archivos individuales integrados en la misma biblioteca .NET 4.5 a la que todos hacen referencia.
Vea a continuación un ejemplo de código:
Le recomiendo que explore la documentación si tiene alguna pregunta.
fuente
Esto es realmente oscuro pero funciona. 7za.exe es una versión independiente de 7zip y está disponible con el paquete de instalación.
fuente
Si alguien necesita comprimir un solo archivo (y no una carpeta): http://blogs.msdn.com/b/jerrydixon/archive/2014/08/08/zipping-a-single-file-with-powershell.aspx
fuente
Aquí está el código de trabajo, comprime todos los archivos de una carpeta de origen y crea un archivo zip en la carpeta de destino.
fuente
Nota:
ZipName: ruta completa del archivo Zip que desea crear.
SourceDirectory: ruta completa al directorio que contiene los archivos que desea comprimir.
fuente
Aquí hay una versión ligeramente mejorada de la respuesta de sonjz, agrega una opción de sobrescritura.
fuente
Esto también debería funcionar para comprimir un solo archivo sin usar una carpeta temporal y usar .Net 4.5 nativo, convertido de C # a partir de esta respuesta de StackOverflow . Utiliza una mejor sintaxis tomada de aquí .
Uso:
ZipFiles -zipFilename output.zip -sourceFile input.sql -filename name.inside.zip.sql
Código:
Utilizando:
fuente
shell.application
negocio u 7-Zip / otras utilidades separadas. También me gusta laUsing-Object
función, aunque elegí un enfoque más corto, rápido y sucio sin eso.Utilizo este fragmento para verificar la carpeta de copias de seguridad de mi base de datos para archivos de copia de seguridad aún no comprimidos, comprimirlos usando 7-Zip y finalmente eliminar los
*.bak
archivos para ahorrar espacio en el disco. Los archivos de aviso se ordenan por longitud (de menor a mayor) antes de la compresión para evitar que algunos archivos no se compriman.Aquí puede verificar un script de PowerShell para hacer copias de seguridad, comprimir y transferir esos archivos a través de FTP .
fuente
En caso de que tenga instalado WinRAR:
El significado de los argumentos: afzip crea un archivo zip, df elimina archivos, ep1 no crea la ruta completa del directorio dentro del archivo
fuente
¡Aquí hay un ejemplo de línea de comando completo para iniciar desde cmd.exe o desde ssh o lo que quieras!
Saludos
fuente
Cargar la
[System.IO.IOException]
clase y usar sus métodos es un paso importante para suprimir errores no deseados, debido al hecho de que es una clase no nativa de PowerShell, por lo tanto, espere varios contextos de errores sin ella.Controlé por error mi script a la T, pero obtuve una gran cantidad de salida roja 'archivo existe' mientras usaba la
[System.IO.Compression.ZipFile]
claseLo que estoy haciendo aquí es detectar estos errores de E / S, como acceder a archivos que ya existen, detectar ese error y dirigirlo a un archivo de registro que estoy manteniendo con un programa más grande.
fuente
Los comandos completos de la línea de comandos en Windows para comprimir y extraer directorios son los siguientes:
Para la compresión:
Para extraer:
fuente
El enfoque iónico oscila:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
admite contraseñas, otros métodos de cifrado, etc.
fuente
Este script itera todos los directorios y comprime cada uno
Get-ChildItem -Attributes d | foreach {write-zip $ .Name "$ ($ .Name) .zip"}
fuente