Compress-Archive
Cria um arquivo compactado, ou arquivo compactado, a partir de arquivos e diretórios especificados.
Sintaxe
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
O cmdlet Compress-Archive
cria um arquivo compactado ou compactado de um ou mais arquivos ou diretórios especificados. Um arquivo empacota vários arquivos, com compactação opcional, em um único arquivo compactado para facilitar a distribuição e o armazenamento. Um arquivo morto pode ser compactado usando o algoritmo de compactação especificado pelo parâmetro CompressionLevel.
O cmdlet Compress-Archive
usa a API System.IO.Compression.ZipArchive para compactar arquivos.
A API limita o tamanho máximo do ficheiro a 2 GB. Para obter mais informações, consulte System.IO.Compression.ZipArchive.
Observação
O cmdlet Compress-Archive
ignora arquivos e pastas ocultos ao criar ou atualizar o arquivo morto. Em máquinas que não sejam Windows, isso inclui arquivos e pastas com nome que começa com o caractere ponto (.
).
Para garantir que arquivos e pastas ocultos sejam compactados no arquivo, use a API do .NET.
Alguns exemplos usam splatting para reduzir o comprimento da linha dos exemplos de código. Para obter mais informações, consulte about_Splatting.
Exemplos
Exemplo 1: Comprimir ficheiros para criar um ficheiro de arquivo
Este exemplo compacta arquivos de diretórios diferentes e cria um arquivo morto. Um curinga é usado para obter todos os arquivos com uma extensão de arquivo específica. Não há estrutura de diretórios no arquivo morto porque o Caminho do especifica apenas nomes de arquivos.
$compress = @{
Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress
O parâmetro Path aceita nomes de arquivo específicos e nomes de arquivo com curingas, *.vsd
. O Caminho do usa uma lista separada por vírgulas para obter arquivos de diretórios diferentes. O nível de compressão é mais rápido para reduzir o tempo de processamento. O parâmetro DestinationPath especifica o local do arquivo Draft.zip
. O arquivo Draft.zip
contém Draftdoc.docx
e todos os arquivos com uma extensão .vsd
.
Exemplo 2: Compactar arquivos usando um LiteralPath
Este exemplo compacta arquivos nomeados específicos e cria um novo arquivo morto. Não há estrutura de diretórios no arquivo morto porque o Caminho do especifica apenas nomes de arquivos.
$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress
Os nomes absolutos de caminho e arquivo são usados porque o parâmetro LiteralPath não aceita curingas. O Caminho do usa uma lista separada por vírgulas para obter arquivos de diretórios diferentes. O nível de compressão é mais rápido para reduzir o tempo de processamento. O parâmetro DestinationPath especifica o local do arquivo Draft.zip
. O arquivo Draft.zip
contém apenas Draftdoc.docx
e diagram2.vsd
.
Exemplo 3: Compactar um diretório que inclui o diretório raiz
Este exemplo compacta um diretório e cria um arquivo que inclui diretório raiz e todos os seus arquivos e subdiretórios. O arquivo morto tem uma estrutura de diretórios porque o Path especifica um diretório raiz.
Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip
Compress-Archive
usa o parâmetro Path para especificar o diretório raiz, C:\Reference
. O parâmetro DestinationPath especifica o local do arquivo morto. O arquivo Draft.zip
inclui o diretório raiz Reference
e todos os seus arquivos e subdiretórios.
Exemplo 4: Compactar um diretório que exclui o diretório raiz
Este exemplo compacta um diretório e cria um arquivo morto que exclui diretório raiz porque o Caminho usa um curinga asterisco (*
). O arquivo contém uma estrutura de diretórios que contém os arquivos e subdiretórios do diretório raiz.
Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip
Compress-Archive
usa o parâmetro Path para especificar o diretório raiz, C:\Reference
com um curinga asterisco (*
). O parâmetro DestinationPath especifica o local do arquivo morto. O arquivo Draft.zip
contém os arquivos e subdiretórios do diretório raiz. O diretório raiz Reference
é excluído do arquivo.
Exemplo 5: Comprimir apenas os ficheiros num diretório raiz
Este exemplo compacta apenas os arquivos em um diretório raiz e cria um arquivo morto. Não há estrutura de diretórios no arquivo morto porque apenas os arquivos são compactados.
Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip
Compress-Archive
usa o parâmetro Path para especificar o diretório raiz, C:\Reference
com um curinga star-dot-star (*.*
). O parâmetro DestinationPath especifica o local do arquivo morto. O arquivo Draft.zip
contém apenas os arquivos do diretório raiz Reference
e o diretório raiz é excluído.
Exemplo 6: Usar o pipeline para arquivar arquivos
Este exemplo envia arquivos pelo pipeline para criar um arquivo. Não há estrutura de diretórios no arquivo morto porque o Caminho do especifica apenas nomes de arquivos.
Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip
Get-ChildItem
usa o parâmetro Path para especificar dois arquivos de diretórios diferentes. Cada arquivo é representado por um objeto FileInfo e é enviado pelo pipeline para Compress-Archive
.
Os dois arquivos especificados são arquivados em PipelineFiles.zip
.
Exemplo 7: Usar o pipeline para arquivar um diretório
Este exemplo envia um diretório pelo pipeline para criar um arquivo. Os arquivos são enviados como FileInfo objetos e diretórios como DirectoryInfo objetos. A estrutura de diretórios do arquivo não inclui o diretório raiz, mas seus arquivos e subdiretórios estão incluídos no arquivo.
Get-ChildItem -Path C:\LogFiles |
Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip
Get-ChildItem
usa o parâmetro Path para especificar o diretório raiz C:\LogFiles
. Cada FileInfo e objeto DirectoryInfo é enviado pelo pipeline.
Compress-Archive
adiciona cada objeto ao arquivo PipelineDir.zip
. O parâmetro Path não é especificado porque os objetos de pipeline são recebidos na posição 0 do parâmetro.
Exemplo 8: Como a recursão pode afetar os arquivos
Este exemplo mostra como a recursão pode duplicar arquivos em seu arquivo. Por exemplo, se você usar Get-ChildItem
com o parâmetro Recurse. Como processos de recursão, cada FileInfo e objeto DirectoryInfo é enviado pelo pipeline e adicionado ao arquivo.
Get-ChildItem -Path C:\TestLog -Recurse |
Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip
O diretório C:\TestLog
não contém nenhum arquivo. Ele contém um subdiretório chamado testsub
que contém o arquivo testlog.txt
.
Get-ChildItem
usa o parâmetro Path para especificar o diretório raiz, C:\TestLog
. O parâmetro Recurse processa os arquivos e diretórios. Um objeto DirectoryInfo é criado para testsub
e um objeto FileInfotestlog.txt
.
Cada objeto é enviado pelo pipeline para Compress-Archive
. O DestinationPath especifica o local para o arquivo morto. O parâmetro Path não é especificado porque os objetos de pipeline são recebidos na posição 0 do parâmetro.
O resumo a seguir descreve o conteúdo do arquivo PipelineRecurse.zip
que contém um arquivo duplicado:
- O objeto DirectoryInfo cria o diretório
testsub
e contém o arquivotestlog.txt
, que reflete a estrutura de diretório original. - O objeto FileInfo cria um
testlog.txt
duplicado na raiz do arquivo. O arquivo duplicado é criado porque a recursão enviou um objeto de arquivo paraCompress-Archive
. Esse comportamento é esperado porque cada objeto enviado pelo pipeline é adicionado ao arquivo.
Exemplo 9: Atualizar um arquivo existente
Este exemplo atualiza um arquivo morto existente, Draft.zip
, no diretório C:\Archives
. Neste exemplo, o arquivo existente contém o diretório raiz e seus arquivos e subdiretórios.
Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip
O comando atualiza Draft.zip
com versões mais recentes de arquivos existentes no diretório C:\Reference
e seus subdiretórios. Além disso, novos arquivos que foram adicionados ao C:\Reference
ou seus subdiretórios são incluídos no arquivo Draft.zip
atualizado.
Parâmetros
-CompressionLevel
Especifica a quantidade de compactação a ser aplicada ao criar o arquivo morto. Uma compactação mais rápida requer menos tempo para criar o arquivo, mas pode resultar em tamanhos maiores.
Se esse parâmetro não for especificado, o comando usará o valor padrão, Optimal.
Os valores aceitáveis para este parâmetro são os seguintes:
- mais rápido. Use o método de compactação mais rápido disponível para reduzir o tempo de processamento. Uma compactação mais rápida pode resultar em tamanhos de arquivo maiores.
- NoCompression. Não compacta os arquivos de origem.
- Ótimo. O tempo de processamento depende do tamanho do arquivo.
Tipo: | String |
Valores aceites: | Optimal, NoCompression, Fastest |
Position: | Named |
Default value: | Optimal |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Confirm
Solicita confirmação antes de executar o cmdlet.
Tipo: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-DestinationPath
Este parâmetro é necessário e especifica o caminho para o arquivo de saída do arquivo. O DestinationPath deve incluir o nome do arquivo compactado e o caminho absoluto ou relativo para o arquivo compactado.
Se o nome do arquivo em DestinationPath não tiver uma extensão de nome de arquivo .zip
, o cmdlet adicionará a extensão de nome de arquivo .zip
.
Tipo: | String |
Position: | 1 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Force
Use este parâmetro para substituir um arquivo existente.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-LiteralPath
Especifica o caminho ou caminhos para os arquivos que você deseja adicionar ao arquivo compactado. Ao contrário do parâmetro Path, o valor de LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como curinga. Se o caminho incluir caracteres de escape, coloque cada caractere de escape entre aspas simples para instruir o PowerShell a não interpretar nenhum caractere como sequências de escape. Para especificar vários caminhos e incluir arquivos em vários locais no arquivo compactado de saída, use vírgulas para separar os caminhos.
Tipo: | String[] |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-PassThru
Faz com que o cmdlet produza um objeto de arquivo que representa o arquivo morto criado.
Esse parâmetro foi introduzido no PowerShell 6.0.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Path
Especifica o caminho ou caminhos para os arquivos que você deseja adicionar ao arquivo compactado. Para especificar vários caminhos e incluir arquivos em vários locais, use vírgulas para separar os caminhos.
Este parâmetro aceita caracteres curinga. Os caracteres curinga permitem que você adicione todos os arquivos em um diretório ao seu arquivo morto.
O uso de curingas com um diretório raiz afeta o conteúdo do arquivo:
- Para criar um arquivo que inclua diretório raiz e todos os seus arquivos e subdiretórios, especifique o diretório raiz no Caminho do sem curingas. Por exemplo:
-Path C:\Reference
- Para criar um arquivo que exclui diretório raiz, mas compacta todos os seus arquivos e subdiretórios, use o curinga asterisco (
*
). Por exemplo:-Path C:\Reference\*
- Para criar um arquivo que apenas compacta os arquivos no diretório raiz, use o curinga star-dot-star (
*.*
). Os subdiretórios da raiz não estão incluídos no arquivo. Por exemplo:-Path C:\Reference\*.*
Tipo: | String[] |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | True |
-Update
Atualiza o arquivo especificado substituindo versões mais antigas no arquivo por versões mais recentes com os mesmos nomes. Você também pode adicionar esse parâmetro para adicionar arquivos a um arquivo existente.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-WhatIf
Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.
Tipo: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
Entradas
Você pode canalizar uma cadeia de caracteres que contém um caminho para um ou mais arquivos.
Saídas
None
Por padrão, esse cmdlet não retorna nenhuma saída.
Quando você usa o parâmetro PassThru, esse cmdlet retorna um FileInfo objeto.
Notas
Usar a recursão e enviar objetos pelo pipeline pode duplicar arquivos em seu arquivo. Por exemplo, se você usar Get-ChildItem
com o parâmetro Recurse, cada FileInfo e objeto DirectoryInfo enviado pelo pipeline será adicionado ao arquivo.
O cmdlet Compress-Archive
usa codificação UTF-8. Outras ferramentas de arquivo ZIP podem usar um esquema de codificação diferente. Ao extrair arquivos com nomes de arquivos não armazenados usando codificação UTF-8, Expand-Archive
usa o valor bruto encontrado no arquivo. Isso pode resultar em um nome de arquivo diferente do nome de arquivo de origem armazenado no arquivo.