HOWTO · PowerShell

Descompactar PowerShell

Este artigo apresenta como descompactar um arquivo zip no powershell.

Nesta página

Para extrair um arquivo ZIP no PowerShell, use Expand-Archive com o caminho do arquivo e, se necessário, um destino. Por exemplo, Expand-Archive -Path .\backup.zip -DestinationPath .\restored extrai o arquivo para a pasta restored. Esse cmdlet extrai arquivos e pastas; ele não cria um arquivo ZIP.

Extraia um arquivo ZIP com Expand-Archive

Expand-Archive aceita o caminho de um arquivo e, opcionalmente, um caminho de destino. A pasta de destino é criada caso ainda não exista. Escolha um destino que você consiga identificar e acessar, especialmente ao extrair um arquivo de origem desconhecida. Arquivos ZIP podem conter vários arquivos e pastas; por isso, confira o conteúdo do destino antes de abrir ou usar os arquivos extraídos.

Escolha -Path ou -LiteralPath

Use -Path quando o caminho do arquivo puder conter caracteres curinga usados para corresponder a caminhos. Use -LiteralPath quando PowerShell precisar tratar o caminho fornecido literalmente, inclusive caracteres como colchetes. Para um arquivo chamado backup[v1].zip, informe o caminho com -LiteralPath; com -Path, os colchetes podem ser interpretados como sintaxe de curinga, em vez de fazer parte do nome do arquivo. Colocar um valor entre aspas ajuda PowerShell a passá-lo como um único argumento, mas não transforma o -Path, que reconhece curingas, em um caminho literal.

Defina o destino e trate arquivos existentes

Informe -DestinationPath com a pasta onde o conteúdo extraído deve ficar. Se você omitir esse parâmetro, Expand-Archive criará, no local atual, uma pasta com o nome do arquivo e extrairá o conteúdo nela. Defina -DestinationPath explicitamente para controlar melhor o local da extração e facilitar a limpeza posterior.

A extração pode falhar quando já existem no destino arquivos que também estão no arquivo ZIP. -Force permite substituir dados existentes. Use-o somente quando a substituição for intencional; antes, confira ou faça uma cópia de segurança dos arquivos importantes no destino. Esse parâmetro não serve apenas para suprimir uma solicitação de confirmação.

Se o arquivo não for encontrado, confira o diretório de trabalho atual e se o caminho é relativo ou absoluto. Verifique a grafia e a extensão e use -LiteralPath se o nome contiver caracteres curinga. Se o arquivo for encontrado, mas o resultado não estiver onde você esperava, defina -DestinationPath explicitamente e confira essa pasta. Você pode adicionar -WhatIf para visualizar a operação antes de executá-la; remova essa opção quando quiser extrair os arquivos. -Confirm solicita confirmação para a operação, enquanto -PassThru retorna informações sobre os arquivos extraídos para uso posterior em um pipeline do PowerShell.

Parâmetros comuns de Expand-Archive

Parâmetro Uso
-Path Informa um caminho de arquivo que pode interpretar caracteres curinga.
-LiteralPath Informa um caminho de arquivo tratado literalmente, inclusive quando o nome contém caracteres curinga.
-DestinationPath Seleciona a pasta onde o conteúdo será extraído.
-Force Permite substituir dados existentes no destino; use com cuidado.
-WhatIf Visualiza a operação sem executá-la.
-Confirm Solicita confirmação antes da operação.
-PassThru Retorna informações sobre os arquivos extraídos.

Exemplos: extraia arquivos ZIP no PowerShell

Execute este exemplo independente no PowerShell. Ele cria um arquivo ZIP pequeno em um diretório temporário, extrai seu conteúdo para outra pasta e exibe o texto extraído. O código e os rótulos ou resultados exibidos no exemplo permanecem em inglês.

$root = Join-Path ([IO.Path]::GetTempPath()) ([guid]::NewGuid().ToString('N'))
$source = Join-Path $root 'source'
$destination = Join-Path $root 'extracted'
$archive = Join-Path $root 'sample.zip'
New-Item -ItemType Directory -Path $source -Force | Out-Null
Set-Content -LiteralPath (Join-Path $source 'notes.txt') -Value 'Archive ready'
Compress-Archive -LiteralPath (Join-Path $source 'notes.txt') -DestinationPath $archive
Expand-Archive -LiteralPath $archive -DestinationPath $destination
Get-Content -LiteralPath (Join-Path $destination 'notes.txt')
Remove-Item -LiteralPath $root -Recurse -Force
Archive ready

Para extrair um arquivo existente para uma pasta escolhida, use Expand-Archive -Path .\backup.zip -DestinationPath .\restored. Se o próprio caminho contiver caracteres curinga, use -LiteralPath, como neste exemplo: Expand-Archive -LiteralPath 'C:\Archives\backup[v1].zip' -DestinationPath 'C:\Restored'. O exemplo independente acima foi executado com sucesso e exibiu Archive ready (código de saída 0). Adapte os comandos deste parágrafo ao seu arquivo e ao destino desejado.