En nuestro día a día con Powershell seguramente tendremos que gestionar tareas o scripts en los que intervengan archivos comprimidos ya sea para trabajar con archivos que recibimos o para por ejemplo crear y gestionar logs o copias de seguridad. Vamos a ver en el Cybertruco de hoy cómo podemos gestionar estos sin tener que abandonar la consola de Powershell.

powershell log file

 

Comprimir archivos

Para esta tarea de comprimir archivos utilizaremos el cmdlet Compress-Archive. Para su utilización básica simplemente necesitaremos el nombre del archivo a comprimir que lo indicaremos en el parámetro -Path, e indicar el destino en el parámetro -DestinationPath como vemos a continuación

Compress-Archive -Path fichero.txt -DestinationPath ficherocomprimido.zip

Si queremos comprimir múltiples ficheros a la vez, simplemente habremos de separar sus nombres con comas, como vemos en el siguiente ejemplo.

Compress-Archive -Path fichero.txt,fichero2.txt,fichero3.pdf -DestinationPath ficherocomprimido.zip

Comprimir todos los archivos de un directorio

En este caso usaremos el asterisco como wildcard para indicar los ficheros a comprimir, como vemos a continuación para comprimir todos los archivos de c:\carpeta

Compress-Archive -Path 'C:\carpeta\*' -DestinationPath ficherocomprimido.zip

Comprimir todos los archivos de un cierto tipo

Igual que en el caso anterior, usaremos el asterisco para por ejemplo comprimir todos los archivos txt de la misma carpeta.

Compress-Archive -Path 'c:\carpeta\*.txt' -DestinationPath ficherocomprimido.zip

Añadir ficheros a un archivo comprimido

Podemos siempre añadir más archivos a un archivo comprimido utilizando el parámetro “Update”, en el siguiente ejemplo añadimos el archivo “extra.txt” al fichero comprimido.

Compress-Archive -Update -Path 'c:\carpeta\extra.txt' -DestinationPath ficherocomprimido.zip

Niveles de compresión

Por defecto, y de la manera que hemos usado los comandos anteriores, los archivos se comprimen utilizando el nivel de compresión “Optimal”, pero podemos usar cualquiera de los siguientes:

  • Optimal - Nivel por defecto, sería el mayor nivel de compresión que se puede obtener
  • Fastest - Compresión más rápida pero menos efectiva
  • NoCompression - Sin compresión

Para indicar este nivel, en caso que lo necesitemos bastará con añadir el parámetro CompressionLevel al final como podemos ver en el siguiente ejemplo

Compress-Archive -Path 'c:\carpeta\*.txt' -DestinationPath ficherocomprimido.zip -CompressionLevel Fastest

Descomprimir ficheros

En este caso utilizaremos el cmdlet Expand-Archive, como veis la estructura del mismo es muy sencilla y similar a lo que hemos estado viendo.

Expand-Archive -Path ficherocomprimido.zip -DestinationPath C:\carpeta\test

Podemos añadir el parámetro “Force” para evitar las confirmaciones tal que

Expand-Archive -Path ficherocomprimido.zip -DestinationPath C:\carpeta\test -Force

Espero que os sea de utilidad, saludos