Compartir a través de


Compress-Archive

Crea un archivo comprimido o un archivo 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 cmdlet Compress-Archive crea un archivo comprimido o comprimido de archivo 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 cmdlet Compress-Archive usa la API System.IO.Compression.ZipArchive para comprimir archivos. La API limita el tamaño máximo de archivo a 2 GB. Para obtener más información, vea System.IO.Compression.ZipArchive.

Nota

El cmdlet Compress-Archive 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, vea 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 los 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 de 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 se más rápido para reducir el tiempo de procesamiento. El parámetro DestinationPath especifica la ubicación del archivo Draft.zip. El archivo Draft.zip contiene Draftdoc.docx y todos los archivos con una extensión .vsd.

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 los 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 se más rápido para reducir el tiempo de procesamiento. El parámetro DestinationPath especifica la ubicación del archivo Draft.zip. El archivo Draft.zip 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 archivo Draft.zip incluye el directorio raíz Reference 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 la ruta de acceso 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 de para especificar el directorio raíz, C:\Reference con un comodín asterisco (*). El parámetro DestinationPath especifica la ubicación del archivo de archivo. El archivo Draft.zip contiene los archivos y subdirectorios del directorio raíz. El directorio raíz Reference 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 de para especificar el directorio raíz, C:\Reference con un de estrella-punto-estrella (*.*) comodín. El parámetro DestinationPath especifica la ubicación del archivo de archivo. El archivo Draft.zip solo contiene los archivos del directorio raíz Reference 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 los 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 de para especificar dos archivos de directorios diferentes. Cada archivo se representa mediante un objeto FileInfo y se envía a Compress-Archivela canalización. 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 de para especificar el directorio raíz de C:\LogFiles. Cada objeto FileInfo y DirectoryInfo se envía a la canalización.

Compress-Archive agrega cada objeto al archivo PipelineDir.zip. No se especifica el parámetro Path 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 FileInfo y objeto 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 directorio C:\TestLog no contiene ningún archivo. Contiene un subdirectorio denominado testsub que contiene el archivo testlog.txt.

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 objeto FileInfotestlog.txt.

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

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

  • El objeto DirectoryInfo crea el directorio testsub y contiene el archivo testlog.txt, que refleja la estructura de directorios original.
  • El objeto FileInfo crea un testlog.txt duplicado 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 directorio C:\Archives. 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 actualiza Draft.zip con versiones más recientes de los archivos existentes en el directorio C:\Reference y sus subdirectorios. Además, los nuevos archivos que se agregaron a C:\Reference o 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, Óptimo.

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 pide 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. El 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 extensión de nombre de archivo .zip, el cmdlet agrega la extensión de nombre de archivo .zip.

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 de, el valor de LiteralPath se usa exactamente como se escribe. No se interpreta ningún carácter 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 incluye el directorio raíz y todos sus archivos y subdirectorios, especifique el directorio raíz en el Ruta de acceso sin caracteres comodín. Por ejemplo: -Path C:\Reference
  • Para crear un archivo que excluye el directorio raíz, pero comprime todos sus archivos y subdirectorios, use el 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 el cmdlet se ejecuta. 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 FileInfo y Objeto DirectoryInfo que se envía a la canalización se agrega al archivo.

El cmdlet Compress-Archive usa 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.