Eu tenho um arquivo em lotes que gera um arquivo de texto. Eu pensei que seria legal se eu pudesse fechar também.
Isso será usado em um ambiente não controlado, por isso não posso fazer suposições sobre a presença de produtos de software de terceiros, como 7-Zip , etc. Isso precisa usar o recurso agora integrado do Windows para compactar arquivos.
windows
command-line
batch
zip
Aaron Bush
fonte
fonte
powershell.exe Compress-Archive file-to-zip.txt zippedfile.zip
(funciona também com pasta)Respostas:
Aqui está uma solução de todos os arquivos em lote (uma variação da minha outra resposta) que irá zipar um arquivo chamado
c:\ue_english.txt
e colocá-lo emC:\someArchive.zip
:O acesso de gravação é necessário para o pai da pasta armazenada em
TEMPDIR
. Como isso geralmente não é o caso da raiz da unidade CTEMPDIR
pode ter que ser mudado.O acesso de gravação também é necessário para a pasta
.bat
script está em (como ele gera um arquivo lá).Além disso, observe que a extensão do arquivo compactado deve ser
.zip
. Tentativas de usar outra extensão podem resultar em um erro de script. Em vez disso, gere o.zip
arquivo e renomeá-lo.fonte
write-zip
cmdlet que pode ser baixado do Pscx .TEMPDIR
? Eu acho que sua intenção é embrulhar o arquivoFILETOZIP
por uma pasta certo?isto é possível zipar arquivos sem a instalação de qualquer software (eu testei). A solução é:
Execute isto em uma janela de linha de comando para criar um arquivo zip nomeado
C:\someArchive.zip
contendo todos os arquivos na pastaC:\test3
:Onde arquivo
zip.vbs
contém:Eu não testei caminhos e nomes de arquivos contendo espaços. Pode funcionar se aspas são colocados em torno dos parâmetros da linha de comando.
Como funciona: a funcionalidade integrada de zip no Windows (Windows XP e posterior?) É exposta através COM interfaces do shell do Windows , explorer.exe - que é a parte "Shell.Application". Essa interface COM pode ser usada de um VBScript roteiro porque esse script pode acessar os componentes COM. Para tornar o script totalmente autocontido, cria um arquivo ZIP vazio para começar (também é possível criar um arquivo ZIP vazio e copiá-lo para o sistema de destino junto com o script VBScript).
O VBScript foi instalado por padrão em todos os desktops lançamento do Microsoft Windows desde o Windows 98.
CScript.exe
faz parte do Windows Script Host. O Windows Script Host é distribuído e instalado por padrão no Windows 98 e versões posteriores do Windows. Ele também é instalado se o Internet Explorer 5 (ou uma versão posterior) estiver instalado.fonte
Se você está aberto a usar PowerShell , os recursos zip estão disponíveis no .NET 2.0 (PowerShell é .NET). Aqui está um exemplo ( fonte ) crédito para Mike Hodnick :
fonte
Você pode eliminar o risco de tempo limite durante a compactação pesquisando a existência da janela de diálogo de compactação. Esse método também manipula o usuário cancelando a janela de compactação.
fonte
.Sleep(whatever)
" me deixa doente.Se você conseguir instalar o Ferramentas do Kit de Recursos , você encontrará uma ferramenta de linha de comando chamada COMPRESS que pode criar arquivos compactados como o zip.
fonte
fonte
objShell.NameSpace( ZipFile ).Items.Count
dentro do loop, é sempre 0 mesmo que o arquivo zip seja criado e tenha o conteúdo esperado dentro ...Vários arquivos / diretórios com código simplificado.
arquivo zip.vbs
fonte
Esta é uma mutação da resposta aceita. Eu faço uma tonelada de tarefas de automação em milhares de arquivos por vez, então eu não posso apenas dormir por 2 segundos e não me importar com isso. Eu peguei a solução alternativa Aqui , que também é semelhante à resposta de Jiří Kočara Aqui .
Isso fará com que a pasta de destino seja pingada a cada 200 ms, o que é aproximadamente o mais rápido que a Microsoft diz para verificar se há atualizações do FS.
fonte
Aqui está minha tentativa de resumir as capacidades internas das janelas para compressão e descompressão - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders-with-batch-f
com algumas soluções dadas que devem funcionar em quase todas as máquinas windows.
No que diz respeito à shell.application e WSH eu preferia o jscript como ele permite um arquivo híbrido em lote / jscript (com extensão .bat) que não requer arquivos temporários.Eu coloquei os recursos de descompactação e zip em um arquivo e mais alguns recursos adicionais.
fonte
Se no Windows 8 ou no Windows Server 2012 você terá o PowerShell e o .NET 4.5, você pode fazer isso:
zip.ps1 (uso:
-directory <directory to zip up> -name <zip name>
):zip.bat (se você precisar de um ajudante para chamar o PowerShell para você, o diretório será o primeiro argumento e o nome do zip será o segundo):
fonte
A linha de comando do Windows agora fornece o comando compact que, até onde eu sei, é nativo do Windows. Isso deve atender aos requisitos solicitados, a menos que eu tenha perdido alguma coisa.
fonte
compact
existia desde o XP e é uma ferramenta para gerenciar a compactação NTFS