Como fazer o 7-zip fazer um monte de pastas

16

Eu tenho um monte de fotos que eu tive que cortar em 800x600 pixels. Isso foi feito facilmente, mas agora tenho que enviá-los para que a família possa vê-los todos.

A coisa é, isso é 500MB em fotos. Decidi simplesmente zipar as pastas separadas, cada uma contendo uma quantidade quase igual de fotos. Dessa forma, posso enviar um par por dia. Fazer isso manualmente é um trabalho muito longo e difícil. Gostaria de saber se existe uma maneira de fazer o 7-zip lidar com cada pasta individualmente?

Acho que vou precisar de um arquivo de lote para fazer isso, mas não sou bom com isso. Eu coloquei tudo em uma pasta. Nas várias subpastas é onde as imagens estão localizadas. O que eu preciso é que o conteúdo dessa pasta seja zipado. Não tenho certeza se posso simplesmente fechar a pasta junto com ela. Eu sei que o PHP tem um módulo zip, eu nunca trabalhei com ele, então não tenho certeza se ele pode lidar com o fato de que o conteúdo do zip é uma pasta que contém os itens, em vez de apenas os itens. / p>     

por KdgDev 11.01.2010 / 17:16

7 respostas

21

Execute a partir de um prompt de comando cujo diretório de trabalho é o diretório My Pictures , esse comando criará um arquivo zip do conteúdo de cada subdiretório, deixando todos os arquivos zip no diretório My Pictures .

Editar: adicionei as aspas necessárias para permitir diretórios com espaços em seus nomes.

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" "%%d"

Além disso: A seguinte versão não colocará arquivos em um subdiretório dentro do arquivo zip, mas em sua raiz:

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" ".\%%d\*"

No Windows 7 e superior

for /D %d in (*.*) do 7z a -tzip "%d.zip" "%d"

ou

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"
    
por 11.01.2010 / 17:49
6

Eu não consegui fazer a linha de comando funcionar, em vez disso eu baixei o WinRAR e o mtone estava certo - o WinRAR tem uma opção para compactar várias pastas em seus próprios arquivos ZIP separados.

Por exemplo C:\Files\Fables 01 em C:\Files\Fables 01.zip e C:\Files\Fables 02 em C:\Files\Fables 02.zip .

Com o WinRAR, abra a pasta que contém as pastas que você deseja compactar e siga estas etapas:

  • Selecione todas as pastas que você deseja compactar / rarar
  • Clique em "ADICIONAR" ou Alt + A ou Comandos - > "Adicionar arquivos ao arquivo"
  • Selecione RAR ou ZIP
  • vá para a guia "Arquivos"
  • Marque "Colocar cada arquivo em um arquivo separado" na caixa "Arquivos"

Quando tiver outras configurações que você deseja corrigir, clique em OK e lança: vários arquivos ZIP de várias pastas. Isso funcionou muito mais fácil do que a linha de comando 7zip.

    
por 14.05.2012 / 11:45
4

Apenas uma pequena atualização da resposta do eleven81: O código abaixo cria um arquivo de lote no qual vários itens podem ser colocados.

@echo off
if [%1]==[] goto :eof
:loop
7z a -tzip "%~1.zip" "%~1"
shift
if not [%1]==[] goto loop

Esse arquivo em lote pode ser adicionado ao menu de contexto por meio do registro:

  1. crie uma nova chave em [HKEY_CLASSES_ROOT \ Folder \ shell], chame-a de cmd1
  2. Edite o valor da string e chame-o de "Batch Zip"
  3. crie outra nova chave sob esta e chame-a de comando
  4. Altere o valor disso para o seu caminho, com barras duplas de escape

Por exemplo, minha entrada é "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1"

Depois de fazer isso, você terá uma entrada em seu menu de contexto para 'Batch Zip', que irá zipar em lotes as pastas selecionadas em arquivos separados

No entanto, se você fizer isso através do menu de contexto, ele infelizmente executará todas as operações simultaneamente, e como qualquer um que tenha feito muito zip e descompactar saberá, as pastas compactadas funcionam muito mais rápido uma depois da outra do que todas de uma vez .

Se alguém souber uma maneira de corrigir isso no registro, por favor, diga.

Arrastar as pastas selecionadas para o lote fará uma após a outra.

    
por 21.06.2011 / 16:17
3

Dica: se as imagens são JPGs, elas já estão compactadas. use o 7-Zip no modo 'arquivo' sem compactação (nível de compressão: armazenamento), isso acelerará o processo tremendamente.

mesmo se você usar Ultra compact você dificilmente ganhará 5%, certamente não vale o esforço.

I was thinking in terms of practically adding attachments.

Eu não os enviaria como anexo de e-mail. em vez disso, faça o upload para o chamado servidor de hospedagem com um clique (por exemplo, drop.io, rs, mu, ms, etc., as opções são suficientes) e envie o link de download por e-mail para seus amigos e familiares.

    
por 11.01.2010 / 17:35
1

O 7-zip tem a opção de descompactar cada arquivo em sua própria pasta (* /), mas não possui os comandos de contexto para fazer a ação oposta que você está procurando.

Dito isso, lembro-me de fazer exatamente isso usando o winrar no passado. Há uma opção "arquivo exclusivo por pasta" ou algo para esse efeito.

    
por 11.01.2010 / 17:28
1

Eu achei a resposta de roryok muito útil, ele forneceu um batch script para Windows que permite a você drag-&-drop arquivos para arquivamento rápido e automatizado.

Para usar este script, basta salvá-lo com uma extensão .bat e, em seguida, arrastar e soltar arquivos e / ou pastas para o arquivo em lotes ( ou um atalho para o arquivo em lotes ).

.zip arquivos serão criados no mesmo diretório que os arquivos de origem.
( embora o destino possa ser alterado no script @ archivePath )

Algumas atualizações foram feitas para melhorar a facilidade de personalização & funcionalidade geral:

  • adicionou variáveis nomeadas
  • implementou um loop for que itera nos argumentos fornecidos
    ( juntamente com delayedexpansion para permitir variáveis de tempo de execução )
  • adicionou if condições para diferenciar files & %código%
    • permite que o conteúdo da pasta seja adicionado ao arquivo diretamente, em vez de incluir a pasta pai no arquivo morto. ( EG: folders VS \archive.zip\file.txt )
  • adicionou um log de erro para exibir instâncias com falha ou exibir uma mensagem de sucesso se não houver erros
@Echo OFF
SetLocal EnableDelayedExpansion



Rem //  7-Zip Executable Path
Set sevenZip="C:\Program Files-Zipz.exe"



Rem // START: NewLine Variable Hack
Set newLine=^


Rem // END: NewLine Variable Hack !! DO NOT DELETE 2 EMPTY LINES ABOVE !!



Rem //  Set ErrorLog Variables
Set errorCount=0
Set separator=--------------------------------------------------------
Set errorLog=!newLine!!newLine!!separator!!newLine!!newLine!
Set errorPrefix=ERROR @:
Set successMessage=All Files Were Successfully Archived



Rem //  Loop Through Each Argument
SetLocal DisableDelayedExpansion
for %%x in (%*) do (

    Rem //  Use Current Argument To set File, Folder, & Archive Paths
    SetLocal DisableDelayedExpansion
    Set filePath="%%~x"
    Set directoryFiles="%%~x\*"
    Set archivePath="%%~x.zip"
    SetLocal EnableDelayedExpansion

    Rem //  Source Is A Folder
    if exist !directoryFiles! (
            Set sourcePath=!directoryFiles!
    )

    Rem //  Source Is A File
    if not exist !directoryFiles! (
            Set sourcePath=!filePath!
    )

    Rem //  Print Separator To Divide 7-Zip Output
    echo !newLine!!newLine!!separator!!newLine!!newLine!

    Rem //  Add Files To Zip Archive
    !sevenZip! A -TZIP !archivePath! !sourcePath!

    Rem //  Log Errors
    if ErrorLevel 1 (
        Set /A errorCount=errorCount+1
        Set errorLog=!errorLog!!newLine!!errorPrefix!!sourcePath!
    )
)



Rem //  Print ErrorLog
if !errorCount!==0 (
    Set errorLog=!errorLog!!newLine!!successMessage!
)
Echo !errorLog!!newLine!!newLine!!newLine!



Rem //  Keep Window Open To View ErrorLog
pause
    
por 25.12.2016 / 14:03
0

Obtenha o picasa e faça o upload para o álbum da web do picasa. Então, todos podem facilmente obter as fotos on-line e visualizá-las. Você pode até carregar os originais (para que sua família possa imprimir as versões maiores)

    
por 21.06.2011 / 16:35

Tags