Compartir a través de


Compress-Archive

Crea un archivo ZIP comprimido a partir de archivos y directorios especificados.

Sintaxis

Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Update
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Force
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Update
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Force
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

Description

El Compress-Archive cmdlet crea un archivo comprimido o comprimido a partir de uno o varios archivos o directorios especificados. Un archivo empaqueta varios archivos, con compresión opcional, en un único archivo comprimido para facilitar la distribución y el almacenamiento. Un archivo de archivo se puede comprimir mediante el algoritmo de compresión especificado por el parámetro CompressionLevel .

El Compress-Archive cmdlet usa la API System.IO.Compression.ZipArchive para comprimir archivos. La API limita el tamaño máximo de archivo a 2 GB. La API de .NET funciona con archivos que se ajustan a la especificación oficial del formato de archivo ZIP de PKWARE Inc. Para obtener más información, consulte System.IO.Compression.ZipArchive.

Nota:

El Compress-Archive cmdlet omite los archivos y carpetas ocultos al crear o actualizar el archivo de archivo. En las máquinas que no son Windows, esto incluye archivos y carpetas con el nombre que comienza con el carácter de punto (.).

Para asegurarse de que los archivos y carpetas ocultos se comprimen en el archivo, use la API de .NET en su lugar.

Algunos ejemplos usan la expansión para reducir la longitud de línea de los ejemplos de código. Para obtener más información, consulte about_Splatting.

Ejemplos

Ejemplo 1: Comprimir archivos para crear un archivo de archivo

En este ejemplo se comprimen los archivos de directorios diferentes y se crea un archivo de archivo. Un carácter comodín se usa para obtener todos los archivos con una extensión de archivo determinada. No hay ninguna estructura de directorios en el archivo de archivo porque la ruta de acceso solo especifica nombres de archivo.

$compress = @{
  Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
  CompressionLevel = "Fastest"
  DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

El parámetro Path acepta nombres de archivo y nombres de archivo específicos con caracteres comodín, *.vsd. La ruta de acceso usa una lista separada por comas para obtener archivos de directorios diferentes. El nivel de compresión es más rápido para reducir el tiempo de procesamiento. El parámetro DestinationPath especifica la ubicación del Draft.zip archivo. El Draft.zip archivo contiene Draftdoc.docx y todos los archivos con una .vsd extensión.

Ejemplo 2: Comprimir archivos mediante literalPath

En este ejemplo se comprimen archivos con nombre específicos y se crea un nuevo archivo de archivo. No hay ninguna estructura de directorios en el archivo de archivo porque la ruta de acceso solo especifica nombres de archivo.

$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

La ruta de acceso absoluta y los nombres de archivo se usan porque el parámetro LiteralPath no acepta caracteres comodín. La ruta de acceso usa una lista separada por comas para obtener archivos de directorios diferentes. El nivel de compresión es más rápido para reducir el tiempo de procesamiento. El parámetro DestinationPath especifica la ubicación del Draft.zip archivo. El Draft.zip archivo solo contiene Draftdoc.docx y diagram2.vsd.

Ejemplo 3: Comprimir un directorio que incluya el directorio raíz

En este ejemplo se comprime un directorio y se crea un archivo de archivo que incluye el directorio raíz y todos sus archivos y subdirectorios. El archivo de archivo tiene una estructura de directorio porque la ruta de acceso especifica un directorio raíz.

Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip

Compress-Archive usa el parámetro Path para especificar el directorio raíz, C:\Reference. El parámetro DestinationPath especifica la ubicación del archivo de archivo. El Draft.zip archivo incluye el Reference directorio raíz y todos sus archivos y subdirectorios.

Ejemplo 4: Comprimir un directorio que excluye el directorio raíz

En este ejemplo se comprime un directorio y se crea un archivo de archivo que excluye el directorio raíz porque path usa un carácter comodín asterisco (*). El archivo contiene una estructura de directorios que contiene los archivos y subdirectorios del directorio raíz.

Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip

Compress-Archive usa el parámetro Path para especificar el directorio raíz, C:\Reference con un carácter comodín asterisco (*). El parámetro DestinationPath especifica la ubicación del archivo de archivo. El Draft.zip archivo contiene los archivos y subdirectorios del directorio raíz. El Reference directorio raíz se excluye del archivo.

Ejemplo 5: Comprimir solo los archivos de un directorio raíz

En este ejemplo solo se comprimen los archivos de un directorio raíz y se crea un archivo de archivo. No hay ninguna estructura de directorios en el archivo porque solo se comprimen los archivos.

Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip

Compress-Archive usa el parámetro Path para especificar el directorio raíz, C:\Reference con un carácter comodín star-dot-star (*.*). El parámetro DestinationPath especifica la ubicación del archivo de archivo. El Draft.zip archivo solo contiene los Reference archivos del directorio raíz y se excluye el directorio raíz.

Ejemplo 6: Uso de la canalización para archivar archivos

En este ejemplo se envían archivos a la canalización para crear un archivo. No hay ninguna estructura de directorios en el archivo de archivo porque la ruta de acceso solo especifica nombres de archivo.

Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
  Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip

Get-ChildItem usa el parámetro Path para especificar dos archivos de directorios diferentes. Cada archivo se representa mediante un objeto FileInfo y se envía la canalización a Compress-Archive. Los dos archivos especificados se archivan en PipelineFiles.zip.

Ejemplo 7: Uso de la canalización para archivar un directorio

En este ejemplo se envía un directorio hacia abajo de la canalización para crear un archivo. Los archivos se envían como objetos FileInfo y directorios como objetos DirectoryInfo . La estructura de directorios del archivo no incluye el directorio raíz, pero sus archivos y subdirectorios se incluyen en el archivo.

Get-ChildItem -Path C:\LogFiles | Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip

Get-ChildItem usa el parámetro Path para especificar el C:\LogFiles directorio raíz. Cada objeto FileInfo y DirectoryInfo se envía a la canalización.

Compress-Archive agrega cada objeto al PipelineDir.zip archivo. El parámetro Path no se especifica porque los objetos de canalización se reciben en la posición del parámetro 0.

Ejemplo 8: Cómo puede afectar la recursividad a los archivos

En este ejemplo se muestra cómo la recursividad puede duplicar archivos en el archivo. Por ejemplo, si usa Get-ChildItem con el parámetro Recurse . A medida que se procesan los procesos de recursividad, cada objeto FileInfo y DirectoryInfo se envía a la canalización y se agrega al archivo.

Get-ChildItem -Path C:\TestLog -Recurse |
  Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip

El C:\TestLog directorio no contiene ningún archivo. Contiene un subdirectorio denominado testsub que contiene el testlog.txt archivo.

Get-ChildItem usa el parámetro Path para especificar el directorio raíz, C:\TestLog. El parámetro Recurse procesa los archivos y directorios. Se crea un objeto DirectoryInfo para testsub y un objeto testlog.txtFileInfo .

Cada objeto se envía por la canalización a Compress-Archive. DestinationPath especifica la ubicación del archivo de archivo. El parámetro Path no se especifica porque los objetos de canalización se reciben en la posición del parámetro 0.

En el resumen siguiente se describe el PipelineRecurse.zip contenido del archivo que contiene un archivo duplicado:

  • El objeto DirectoryInfo crea el testsub directorio y contiene el testlog.txt archivo , que refleja la estructura de directorios original.
  • El objeto FileInfo crea un duplicado testlog.txt en la raíz del archivo. El archivo duplicado se crea porque la recursividad envió un objeto de archivo a Compress-Archive. Este comportamiento se espera porque cada objeto enviado hacia abajo de la canalización se agrega al archivo.

Ejemplo 9: Actualización de un archivo de archivo existente

En este ejemplo se actualiza un archivo de archivo existente, Draft.zip, en el C:\Archives directorio . En este ejemplo, el archivo de archivo existente contiene el directorio raíz y sus archivos y subdirectorios.

Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip

El comando se actualiza Draft.zip con versiones más recientes de los archivos existentes en el C:\Reference directorio y sus subdirectorios. Además, los nuevos archivos que se agregaron a C:\Reference o a sus subdirectorios se incluyen en el archivo actualizado Draft.zip .

Parámetros

-CompressionLevel

Especifica la cantidad de compresión que se va a aplicar al crear el archivo de archivo. La compresión más rápida requiere menos tiempo para crear el archivo, pero puede dar lugar a tamaños de archivo más grandes.

Si no se especifica este parámetro, el comando usa el valor predeterminado, Optimal.

A continuación se muestran los valores aceptables para este parámetro:

  • Más rápido. Use el método de compresión más rápido disponible para reducir el tiempo de procesamiento. La compresión más rápida puede dar lugar a tamaños de archivo más grandes.
  • NoCompression. No comprime los archivos de origen.
  • Óptimo. El tiempo de procesamiento depende del tamaño del archivo.
Tipo:String
Valores aceptados:Optimal, NoCompression, Fastest
Posición:Named
Valor predeterminado:Optimal
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Confirm

Le solicita su confirmación antes de ejecutar el cmdlet.

Tipo:SwitchParameter
Alias:cf
Posición:Named
Valor predeterminado:False
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-DestinationPath

Este parámetro es necesario y especifica la ruta de acceso al archivo de salida de archivo. DestinationPath debe incluir el nombre del archivo comprimido y la ruta de acceso absoluta o relativa al archivo comprimido.

Si el nombre de archivo de DestinationPath no tiene una .zip extensión de nombre de archivo, el cmdlet agrega la extensión de .zip nombre de archivo.

Tipo:String
Posición:1
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Force

Use este parámetro para sobrescribir un archivo de archivo existente.

Tipo:SwitchParameter
Posición:Named
Valor predeterminado:False
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-LiteralPath

Especifica la ruta de acceso o las rutas de acceso a los archivos que desea agregar al archivo comprimido de archivo. A diferencia del parámetro Path , el valor de LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso incluye caracteres de escape, incluya cada carácter de escape entre comillas simples para indicar a PowerShell que no interprete ningún carácter como secuencias de escape. Para especificar varias rutas de acceso e incluir archivos en varias ubicaciones del archivo comprimido de salida, use comas para separar las rutas de acceso.

Tipo:String[]
Alias:PSPath
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-PassThru

Hace que el cmdlet produzca un objeto de archivo que represente el archivo de archivo creado.

Este parámetro se introdujo en PowerShell 6.0.

Tipo:SwitchParameter
Posición:Named
Valor predeterminado:False
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Path

Especifica la ruta de acceso o las rutas de acceso a los archivos que desea agregar al archivo comprimido de archivo. Para especificar varias rutas de acceso e incluir archivos en varias ubicaciones, use comas para separar las rutas de acceso.

Este parámetro acepta caracteres comodín. Los caracteres comodín permiten agregar todos los archivos de un directorio al archivo de archivo.

El uso de caracteres comodín con un directorio raíz afecta al contenido del archivo:

  • Para crear un archivo que incluya el directorio raíz y todos sus archivos y subdirectorios, especifique el directorio raíz en la ruta de acceso sin caracteres comodín. Por ejemplo: -Path C:\Reference
  • Para crear un archivo que excluya el directorio raíz, pero comprima todos sus archivos y subdirectorios, use el carácter comodín asterisco (*). Por ejemplo: -Path C:\Reference\*
  • Para crear un archivo que solo comprima los archivos en el directorio raíz, use el carácter comodín star-dot-star (*.*). Los subdirectorios de la raíz no se incluyen en el archivo. Por ejemplo: -Path C:\Reference\*.*
Tipo:String[]
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:True

-Update

Actualiza el archivo especificado reemplazando las versiones anteriores del archivo por versiones de archivo más recientes que tienen los mismos nombres. También puede agregar este parámetro para agregar archivos a un archivo existente.

Tipo:SwitchParameter
Posición:Named
Valor predeterminado:False
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-WhatIf

Muestra lo que sucedería si se ejecutara el cmdlet. El cmdlet no se ejecuta.

Tipo:SwitchParameter
Alias:wi
Posición:Named
Valor predeterminado:False
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

Entradas

String

Puede canalizar una cadena que contenga una ruta de acceso a uno o varios archivos.

Salidas

None

De forma predeterminada, este cmdlet no devuelve ninguna salida.

FileInfo

Cuando se usa el parámetro PassThru , este cmdlet devuelve un objeto FileInfo .

Notas

El uso de la recursividad y el envío de objetos hacia abajo de la canalización puede duplicar archivos en el archivo. Por ejemplo, si usa Get-ChildItem con el parámetro Recurse , cada objeto FileInfo y DirectoryInfo que se envía a la canalización se agrega al archivo.

El Compress-Archive cmdlet usa la codificación UTF-8. Otras herramientas de archivo ZIP pueden usar un esquema de codificación diferente. Al extraer archivos con nombres de archivo que no se almacenan mediante codificación UTF-8, Expand-Archive usa el valor sin procesar que se encuentra en el archivo. Esto puede dar lugar a un nombre de archivo diferente del nombre de archivo de origen almacenado en el archivo.