Cómo comprimir y descomprimir archivos con PowerShell

Última actualización: 10 de noviembre de 2026
Autor: Isaac
  • Uso de los cmdlets Compress-Archive y Expand-Archive para la gestión de archivos ZIP.
  • Control de niveles de compresión y gestión de rutas mediante parámetros específicos.
  • Limitaciones técnicas de la API de .NET respecto al tamaño máximo de los archivos.
  • Posibilidad de actualizar archivos existentes y sobrescribir datos mediante comandos forzados.

Primer plano de una pantalla de portátil mostrando una interfaz de línea de comandos con texto verde brillante, representando el entorno de PowerShell y la automatización de tareas.

Seguramente te ha pasado que necesitas empaquetar un montón de carpetas o extraer el contenido de un ZIP y te da una pereza increíble tener que andar haciendo clics en menús y botones del explorador de Windows. Para esos momentos, PowerShell se convierte en el aliado perfecto, ya que nos permite automatizar estas tareas mediante la línea de comandos, ahorrando tiempo y evitando errores manuales.

Para poder hacer magia con los archivos comprimidos, es fundamental contar con la versión 5.0 de PowerShell o una posterior. Si por algún motivo trabajas en sistemas más antiguos como Windows 7 o Windows Server 2008 R2, no te preocupes, ya que puedes instalar el Windows Management Framework desde la web de Microsoft para habilitar estas funciones. Una vez tengas el sistema al día, podrás manejar archivos ZIP como un auténtico profesional.

Creación de archivos comprimidos con Compress-Archive

Vista detallada de un teclado iluminado y una pantalla con comandos de terminal, evocando el trabajo técnico de administración de sistemas en Windows.

El comando estrella para empaquetar datos es Compress-Archive. En su forma más sencilla, solo necesitas decirle qué quieres comprimir y dónde quieres guardar el resultado. Por ejemplo, si quieres meter toda una carpeta en un ZIP, utilizas el parámetro -Path para el origen y -DestinationPath para el archivo final. Lo bueno es que si olvidas poner la extensión .zip al final del nombre, PowerShell es lo suficientemente listo para añadirla por ti.

A veces no queremos comprimir todo el contenido, sino solo algunas piezas. Para ello, podemos usar caracteres comodín. Si ponemos un asterisco (*) al final de la ruta, el comando comprimirá todo lo que haya dentro de la carpeta, pero dejará fuera la carpeta raíz. Si, por el contrario, buscamos solo archivos específicos, como los documentos de texto, podemos usar la expresión *.txt. Para aquellos archivos cuyos nombres tengan caracteres especiales que puedan confundir al sistema, lo ideal es usar el parámetro -LiteralPath, que trata la ruta exactamente como está escrita sin interpretar comodines.

Personalización y optimización del empaquetado

No siempre necesitamos la misma calidad de compresión. Dependiendo de si priorizamos el espacio o la velocidad, podemos jugar con el parámetro -CompressionLevel. Tenemos tres opciones: Optimal, que es la configuración por defecto y busca el menor tamaño posible aunque tarde un pelín más; Fastest, que prioriza la rapidez del proceso sacrificando algo de espacio; y NoCompression, que simplemente agrupa los archivos sin reducir su peso.

Si ya tienes un archivo ZIP creado y quieres añadirle más cosas sin borrar lo anterior, el parámetro -Update es tu mejor opción, ya que actualiza los archivos existentes y añade los nuevos. Ahora bien, si lo que quieres es machacar un archivo que ya existe sin que el sistema te pregunte nada, debes añadir -Force al comando. Esto es especialmente útil en scripts donde no queremos que el proceso se detenga pidiendo confirmaciones.

Extracción de datos con Expand-Archive

Pantalla de ordenador con comandos de consola y teclado retroiluminado, ideal para ilustrar la ejecución de scripts de compresión y descompresión de archivos.

Para el proceso inverso, utilizamos Expand-Archive. Este cmdlet es extremadamente directo: le indicas la ruta del archivo ZIP y la carpeta donde quieres soltar el contenido. Un detalle muy cómodo es que la carpeta de destino no necesita existir previamente, ya que PowerShell la creará automáticamente si nota que falta.

Al igual que ocurre con la compresión, si intentas descomprimir archivos en una carpeta donde ya hay archivos con el mismo nombre, el sistema lanzará un error. Para evitar este bache y sobrescribir los datos antiguos, simplemente incluye el parámetro -Force. Si necesitas una lista detallada de todo lo que se ha extraído, puedes usar -PassThru, que te devolverá un objeto con la información de los archivos expandidos.

Consideraciones técnicas y limitaciones

Es importante tener en cuenta que estos comandos utilizan internamente la API System.IO.Compression.ZipArchive. Esto conlleva una limitación importante: el tamaño máximo de archivo es de 2 GB. Si intentas procesar archivos más grandes, el comando fallará estrepitosamente. En esos casos críticos, muchos usuarios optan por herramientas externas como 7-Zip, aunque perderían la sencillez de la integración nativa de PowerShell.

Otro aspecto a vigilar es la codificación. PowerShell usa UTF-8 para nombrar los archivos. Si extraes un ZIP creado con una herramienta que use una codificación distinta, es posible que los nombres de los archivos no se vean exactamente igual que en el original. Además, hay que tener cuidado al combinar Get-ChildItem con el parámetro -Recurse y enviarlo por canalización (pipeline) hacia la compresión, ya que esto puede provocar que algunos archivos se dupliquen dentro del archivo final al procesarse tanto el directorio como el archivo individual.

Dominar estos dos cmdlets permite gestionar copias de seguridad, organizar logs y distribuir archivos de forma eficiente sin salir de la consola. Combinando el uso de rutas literales, niveles de compresión ajustados y la capacidad de actualización de archivos, cualquier administrador de sistemas puede optimizar su flujo de trabajo diario en Windows.