É possível criar um arquivo zip usando o PowerShell?
powershell
zip
archive
Valentin Vasilyev
fonte
fonte
Respostas:
Se você seguir para o CodePlex e pegar as Extensões da comunidade do PowerShell , poderá usar o
write-zip
cmdlet.Desde a
você pode acessar a Galeria do PowerShell .
fonte
write-zip [input file/folder] [output file]
Uma alternativa pura do PowerShell que funciona com o PowerShell 3 e o .NET 4.5 (se você pode usá-lo):
Basta passar o caminho completo para o arquivo zip que você deseja criar e o caminho completo para o diretório que contém os arquivos que você deseja compactar.
fonte
Adiciona
Compress-Archive
eExpand-Archive
cmdlets do PowerShell v5.0 . As páginas vinculadas têm exemplos completos, mas a essência é:fonte
Compress-Archive
Descrição: "... o tamanho máximo do arquivo que você pode compactar usando o Compress-Archive atualmente é de 2 GB. Isso é uma limitação da API subjacente" No entanto, se você usar,System.IO.Compression.ZipFile
poderá ignorar essa limitação.System.IO.Compression.ZipFile
. Se a estrutura .NET que você está usando não tiver esse limite, o CmdLet não deve atingir esse limite. Eu verifiquei no código.-OutputPath
parâmetro.Uma maneira nativa com a estrutura .NET 4.5 mais recente, mas totalmente sem recursos:
Criação:
Extração:
Como mencionado, totalmente sem recursos, não espere um sinalizador de substituição .
ATUALIZAÇÃO: Veja abaixo outros desenvolvedores que expandiram isso ao longo dos anos ...
fonte
Instale o 7zip (ou faça o download da versão da linha de comando) e use este método do PowerShell:
Você pode chamar assim:
fonte
& "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
O lote mudou desde que a resposta inicial foi lançada. Aqui estão alguns dos exemplos mais recentes usando o comando Compress-Archive .
Comando para criar um novo arquivo compactado,
Draft.zip
compactando dois arquivosDraftdoc.docx
ediagram2.vsd
especificado peloPath
parâmetro O nível de compactação especificado para esta operação é Ótimo.Comando para criar um novo arquivo compactado,
Draft.zip
compactando dois arquivosDraft doc.docx
eDiagram [2].vsd
especificado peloLiteralPath
parâmetro O nível de compactação especificado para esta operação é Ótimo.Comando para criar um novo arquivo morto,,
Draft.zip
naC:\Archives
pasta O novo arquivo contém todos os arquivos na pasta C: \ Reference , porque um caractere curinga foi usado no lugar de nomes de arquivo específicos no parâmetro Path .O comando cria um arquivo morto a partir de uma pasta inteira,
C:\Reference
O PowerShell anexa a
.zip
extensão ao nome do arquivo automaticamente.fonte
Editar dois - Este código é um kluge feio e feio dos tempos antigos. Você não quer isso.
Isso comprime o conteúdo de
.\in
para.\out.zip
com System.IO.Packaging.ZipPackage, seguindo o exemplo aquiEditar: não confiável para arquivos maiores, talvez> 10mb, YMMV. Algo a ver com evidências de domínio de aplicativo e armazenamento isolado. A abordagem mais amigável do .NET 4.5 funciona bem no PS v3, mas queria mais memória no meu caso. Para usar o .NET 4 do PS v2, os arquivos de configuração precisam de um ajuste não suportado .
fonte
Dando abaixo outra opção. Isso compactará uma pasta completa e gravará o arquivo morto em um determinado caminho com o nome fornecido.
Requer .NET 3 ou superior
fonte
Aqui está uma solução nativa para o PowerShell v5, usando o cmdlet
Compress-Archive
Criando arquivos Zip usando o PowerShell .Consulte também o Microsoft Docs for Compact-Archive .
Exemplo 1:
Exemplo 2:
Exemplo 3:
fonte
Para compactação, eu usaria uma biblioteca (7-Zip é bom como Michal sugere ).
Se você instalar o 7-Zip , o diretório instalado conterá
7z.exe
um aplicativo de console.Você pode invocá-lo diretamente e usar qualquer opção de compactação que desejar.
Se você deseja se envolver com a DLL, isso também deve ser possível.
7-Zip é freeware e código aberto.
fonte
Que tal
System.IO.Packaging.ZipPackage
?Seria necessário o .NET 3.0 ou superior.
via Anders Hesselbom
fonte
Por que ninguém olha a documentação? Existe um método suportado de criar um arquivo zip vazio e adicionar arquivos individuais a ele embutidos na mesma biblioteca do .NET 4.5 que todo mundo está fazendo referência.
Veja abaixo um exemplo de código:
Convido você a procurar a documentação se tiver alguma dúvida.
fonte
Isso é realmente obscuro, mas funciona. 7za.exe é a versão autônoma do 7zip e está disponível no pacote de instalação.
fonte
Se alguém precisar compactar um único arquivo (e não uma pasta): http://blogs.msdn.com/b/jerrydixon/archive/2014/08/08/zipping-a-single-file-with-powershell.aspx
fonte
Aqui está o código de trabalho, compactando todos os arquivos de uma pasta de origem e crie um arquivo zip na pasta de destino.
fonte
Nota:
ZipName: caminho completo do arquivo zip que você deseja criar.
SourceDirectory: Caminho completo para o diretório que contém os arquivos que você deseja compactar.
fonte
Aqui está uma versão ligeiramente melhorada da resposta do sonjz, que adiciona uma opção de substituição.
fonte
Isso também deve funcionar para compactar um único arquivo sem usar uma pasta temporária e usar o .Net 4.5 nativo, convertido de C # a partir desta resposta do StackOverflow . Ele usa uma sintaxe mais agradável usando aqui .
Uso:
ZipFiles -zipFilename output.zip -sourceFile input.sql -filename name.inside.zip.sql
Código:
Usando:
fonte
shell.application
negócio ou 7-Zip / outros utilitários separados. Também gosto daUsing-Object
função, apesar de ter adotado uma abordagem mais rápida e rápida sem sujeira.Eu uso esse trecho para verificar a pasta de backups do meu banco de dados em busca de arquivos de backup ainda não compactados, compactá-los usando o 7-Zip e finalmente excluir os
*.bak
arquivos para economizar espaço em disco. Os arquivos de aviso são ordenados por tamanho (do menor para o maior) antes da compactação para evitar que alguns arquivos não sejam compactados.Aqui você pode verificar um script do PowerShell para fazer backup, compactar e transferir esses arquivos por FTP .
fonte
Caso você tenha o WinRAR instalado:
O significado dos argumentos: afzip cria arquivo zip, df exclui arquivos, ep1 não cria o caminho completo do diretório dentro do arquivo
fonte
Aqui está um exemplo completo da linha de comando para iniciar a partir do cmd.exe ou do ssh ou o que você quiser!
Saudações
fonte
Carregar a
[System.IO.IOException]
classe e usar seus métodos é uma etapa importante para suprimir erros indesejados, devido ao fato de ser uma classe não nativa do PowerShell, portanto, espere vários contextos de erros sem ela.Eu controlei meu script com erro no T, mas obtive um monte de saída extra de 'arquivo vermelho' ao usar a
[System.IO.Compression.ZipFile]
classeO que estou fazendo aqui é capturar esses erros de E / S, como acessar arquivos que já existem, capturar esse erro e direcioná-lo para um arquivo de log que estou mantendo com um programa maior.
fonte
Os comandos completos da linha de comando no Windows para compactar e extrair o diretório são os seguintes:
Para compressão:
Para extrair:
fonte
A abordagem iônica é fundamental:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
suporta senhas, outros métodos de criptografia, etc.
fonte
Este script itera todos os diretórios e compacta cada um
Get-ChildItem-Atributos d | foreach {write-zip $ .Name "$ ($ .Name) .zip"}
fonte