Eu não acho que exista uma linha de comando para arquivos ZIP incorporados ao Windows (exceto compressno Server 2003 Resource Kit). Você precisaria usar terceiros. Todo mundo adora o 7zip !
Combinei esse script de várias fontes diferentes para atender melhor às minhas necessidades. Copie e cole o script em um arquivo com a extensão ".vbs". O script foi originalmente criado para o Windows XP, mas também funciona no Windows 7 x64 Ultimate - não há garantia de que o Windows manterá os vários objetos do Shell que ele usa.
Caminho para o script, pasta de origem, arquivo zip para criar (inclua .zip no final).
Não copiará pastas vazias, portanto, tenha cuidado.
Aqui está o código vbs ---
Set Args = Wscript.Arguments
source = Args(0)
target = Args(1)
' make sure source folder has \ at end
If Right(source, 1) <> "\" Then
source = source & "\"
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set zip = objFSO.OpenTextFile(target, 2, vbtrue)
' this is the header to designate a file as a zip
zip.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
zip.Close
Set zip = nothing
wscript.sleep 500
Set objApp = CreateObject( "Shell.Application" )
intSkipped = 0
' Loop over items within folder and use CopyHere to put them into the zip folder
For Each objItem in objApp.NameSpace( source ).Items
If objItem.IsFolder Then
Set objFolder = objFSO.GetFolder( objItem.Path )
' if this folder is empty, then skip it as it can't compress empty folders
If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then
intSkipped = intSkipped + 1
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Next
intSrcItems = objApp.NameSpace( source ).Items.Count
wscript.sleep 250
' delay until at least items at the top level are available
Do Until objApp.NameSpace( target ).Items.Count + intSkipped = intSrcItems
wscript.sleep 200
Loop
'cleanup
Set objItem = nothing
Set objFolder = nothing
Set objApp = nothing
Set objFSO = nothing
Parece promissor, mas recebi o erro "Objeto necessário: 'objApp.NameSpace (...)' na linha 16
pihentagy
Eu tenho o mesmo problema. O código acima não funciona ou precisa de algumas coisas extras no sistema que o pôster esqueceu de mencionar.
Shaamaan
Ele usa WScript (ambiente vbs) e vários objetos Shell. Todos foram instalados por padrão no Windows XP (comercial?) E no Win 7 Ultimate x64. Talvez eles estejam mais lá para o Win8?
WSkid
2
É possível executar o script do PowerShell a partir do BAT. O arquivo bat recebe o caminho para o diretório a ser compactado e o nome do arquivo zip como parâmetros.
@echo off
setlocal
rem First parameter - path to dir to be zipped
rem Second parameter- zip file name
set sourceDir=%1
set zipFile=%2
rem Create PowerShell script
echo Write-Output 'Custom PowerShell profile in effect!' > %~dp0TempZipScript.ps1
echo Add-Type -A System.IO.Compression.FileSystem >> %~dp0TempZipScript.ps1
echo [IO.Compression.ZipFile]::CreateFromDirectory('%sourceDir%','%~dp0%zipFile%') >> %~dp0TempZipScript.ps1
rem Execute script with flag "-ExecutionPolicy Bypass" to get around ExecutionPolicy
PowerShell.exe -ExecutionPolicy Bypass -Command "& '%~dp0TempZipScript.ps1'"
del %~dp0TempZipScript.ps1
endlocal
Mas qual seria a vantagem dessa abordagem? Por que não gravar o script do PowerShell em um arquivo fixo e permitir que ele aceite parâmetros?
Seth
Eu tentei todas as outras soluções. esta é a única solução à prova de falhas que funciona perfeitamente. A vantagem mais importante é o uso dos comandos nativos do powershell e não é necessário criar o VBScript antigo.
desmati 8/04
Isso funcionou para mim em um laptop corporativo windows7 antigo em 2019.
simbo1905
1
Aqui está um ótimo link que mostra como compactar um arquivo usando comandos nativos do Windows.
Testei-o com um diretório contendo vários arquivos e pastas aninhados e funcionou perfeitamente. Basta seguir o formato da linha de comando.
Existe também uma maneira de descompactar os arquivos via linha de comando, que eu também encontrei. Uma maneira, apenas abre uma janela do explorador mostrando qual é o conteúdo do arquivo compactado. Alguns deles também usam Java, que não é necessariamente nativo do Windows, mas é tão comum que quase parece.
Você deve incluir as instruções na sua resposta. Se os links ficarem obsoletos, sua resposta não terá valor ...
MoonSire
1
Esta é uma pergunta antiga, mas sua relevância ainda é atual.
É claro que o Windows possui seu próprio algoritmo de compactação embutido para o uso de arquivos zip, mas realmente apresenta um desempenho ruim quando comparado ao produto de código aberto 7zip encontrado aqui http://www.7-zip.org/
Outros já discutiram vários métodos para usar as funções internas do Windows, minha solução requer a instalação de software adicional.
O 7Zip suporta uma ampla variedade de arquivos, incluindo ZIP, RAR, CAB e ISO e seu próprio formato 7z.
Você pode exibir a ajuda da linha de comando: "C: \ Arquivos de Programas \ 7-Zip \ 7z.exe" --help
para executar uma simples adição ao arquivo zip:
"C: \ Arquivos de Programas \ 7-Zip \ 7z.exe" é um nome de arquivo.zip c: \ path
Não foi isso que me propus a fazer, mas agora funcionará para mim. Esse é um truque útil para saber.
bballdave025 4/04
0
Vou postar algo relacionado à resposta do WSkids, pois infelizmente não posso usar a função de comentário.
O uso do método CopyHere () no VBS apresenta vários problemas. Um desses problemas é que o método retorna imediatamente enquanto o processo de cópia é iniciado em segundo plano, enquanto várias chamadas CopyHere () interferem uma na outra e o ZIP não será criado corretamente. Um loop de espera é necessário aqui para corrigir isso. Meu loop de espera é baseado em uma resposta para um problema semelhante postado aqui .
Aqui está uma versão atualizada que corrige o erro "Objeto necessário" relatado pelo pihentagy . É um problema de tempo, pois o arquivo ZIP recém-criado é incluído na coleção Items quando o script é executado em máquinas rápidas.
set Args = WScript.Arguments
source = Args(0)
' remove trailing slashes as we add slashes when needed later
while Right(source, 1) = "\"
source = Mid(source, 1, Len(source) - 1)
wend
target = Args(1)
' create empty ZIP file
set fso = CreateObject("Scripting.FileSystemObject")
set zip = fso.OpenTextFile(target, 2, vbtrue)
' write ZIP header, this ensures that Windows recognizes the file as "ZIP Folder"
zip.Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
zip.Close
set zip = nothing
set fso = nothing
' copy files to ZIP file
set app = CreateObject("Shell.Application")
set sourceFolderObj = app.NameSpace(source)
set targetFolderObj = app.NameSpace(target)
for each item in sourceFolderObj.Items
itemPath = source & "\" & item.Name
copyItem = false
' ZIP file is included in Items collection and is recognized as folder, thus skip it to avoid script errors
if itemPath <> target then
if item.IsFolder then
if item.GetFolder.Items().Count = 0 then
' folder is empty, skip it as empty folders can't be compressed
else
copyItem = true
end if
else
copyItem = true
end if
end if
if copyItem then
targetFolderObj.CopyHere item
' wait until the file appears in the ZIP file,
' this is needed because CopyHere() returns immediately after starting an asynchronous copy process
' (starting multiple asynchronous copy will not work as it causes error messages, an invalid ZIP file, ...)
while (targetFolderObj.ParseName(item.Name) is nothing)
WScript.Sleep 1
wend
end If
next
set targetFolderObj = nothing
set sourceFolderObj = nothing
set app = nothing
compress.exe
.Respostas:
A partir do PowerShell 5 (fevereiro de 2016), você pode usar o "Compress-Archive":
Ou:
http://msdn.microsoft.com/powershell/reference/5.0/microsoft.powershell.archive/compress-archive
fonte
Eu não acho que exista uma linha de comando para arquivos ZIP incorporados ao Windows (exceto
compress
no Server 2003 Resource Kit). Você precisaria usar terceiros. Todo mundo adora o 7zip !fonte
Combinei esse script de várias fontes diferentes para atender melhor às minhas necessidades. Copie e cole o script em um arquivo com a extensão ".vbs". O script foi originalmente criado para o Windows XP, mas também funciona no Windows 7 x64 Ultimate - não há garantia de que o Windows manterá os vários objetos do Shell que ele usa.
Uso: na caixa de execução ou na linha de comando
Caminho para o script, pasta de origem, arquivo zip para criar (inclua .zip no final).
Não copiará pastas vazias, portanto, tenha cuidado.
Aqui está o código vbs ---
fonte
É possível executar o script do PowerShell a partir do BAT. O arquivo bat recebe o caminho para o diretório a ser compactado e o nome do arquivo zip como parâmetros.
fonte
Aqui está um ótimo link que mostra como compactar um arquivo usando comandos nativos do Windows.
Você pode compactar um arquivo no prompt de comando usando SOMENTE o recurso interno do Windows para compactar arquivos?
Testei-o com um diretório contendo vários arquivos e pastas aninhados e funcionou perfeitamente. Basta seguir o formato da linha de comando.
Existe também uma maneira de descompactar os arquivos via linha de comando, que eu também encontrei. Uma maneira, apenas abre uma janela do explorador mostrando qual é o conteúdo do arquivo compactado. Alguns deles também usam Java, que não é necessariamente nativo do Windows, mas é tão comum que quase parece.
O Windows 7 tem descompactado na linha de comando instalada por padrão?
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
fonte
Esta é uma pergunta antiga, mas sua relevância ainda é atual.
É claro que o Windows possui seu próprio algoritmo de compactação embutido para o uso de arquivos zip, mas realmente apresenta um desempenho ruim quando comparado ao produto de código aberto 7zip encontrado aqui http://www.7-zip.org/
Outros já discutiram vários métodos para usar as funções internas do Windows, minha solução requer a instalação de software adicional.
O 7Zip suporta uma ampla variedade de arquivos, incluindo ZIP, RAR, CAB e ISO e seu próprio formato 7z.
Você pode exibir a ajuda da linha de comando: "C: \ Arquivos de Programas \ 7-Zip \ 7z.exe" --help
para executar uma simples adição ao arquivo zip:
"C: \ Arquivos de Programas \ 7-Zip \ 7z.exe" é um nome de arquivo.zip c: \ path
fonte
Aqui está outra idéia, de 4 fontes diferentes; não minhas idéias, mas eu as compilei para que funcionasse para mim
fonte
Imagine que você deseja compactar a mesma pasta em que está no prompt de comando SEM abrir uma janela do PowerShell:
fonte
Vou postar algo relacionado à resposta do WSkids, pois infelizmente não posso usar a função de comentário.
O uso do método CopyHere () no VBS apresenta vários problemas. Um desses problemas é que o método retorna imediatamente enquanto o processo de cópia é iniciado em segundo plano, enquanto várias chamadas CopyHere () interferem uma na outra e o ZIP não será criado corretamente. Um loop de espera é necessário aqui para corrigir isso. Meu loop de espera é baseado em uma resposta para um problema semelhante postado aqui .
Aqui está uma versão atualizada que corrige o erro "Objeto necessário" relatado pelo pihentagy . É um problema de tempo, pois o arquivo ZIP recém-criado é incluído na coleção Items quando o script é executado em máquinas rápidas.
fonte
Aqui está minha tentativa de resumir as janelas dos recursos internos para compactação e descompactação - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders -com-lote-f
com algumas soluções fornecidas que devem funcionar em quase todas as máquinas Windows.
fonte