Como eu crio arquivos zip separados para cada arquivo / diretório selecionado no 7zip?

24

Este é o zip packer interno do Total Commander:

No entanto, quero usar meu 7zip packer. Quando seleciono 5 arquivos, recebo 5 arquivos .zip separados para cada arquivo selecionado. Como faço isso no 7zip?

    
por Grumpy ol' Bear 18.07.2011 / 16:16

3 respostas

43

Não tenho certeza se você pode fazer o que você está sugerindo usando a interface gráfica do usuário, mas certamente você pode usar a linha de comando:

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"

Você precisaria alterar o diretório (o comando cd ) para o diretório F:\Downloads primeiro ou o diretório que deseja executar a compactação em massa. Além disso, é fácil substituir em * .exe ou qualquer extensão que você queira filtrar para apenas compactar esses documentos.

E o anel do decodificador secreto:

  • %i é uma variável que contém o nome do arquivo para cada etapa do loop
  • (*.*) é o critério de seleção, pode ser facilmente * .exe ou similar
  • 7z.exe é a versão de linha de comando do 7-Zip
  • %~ni - isso expande a variável% i para apenas o nome do arquivo - sem extensão

Se você quiser apenas adicionar as pastas de um determinado diretório, o comando é um pouco mais complexo, pois, por padrão, o FOR apenas trabalha com arquivos. Precisamos fornecer algumas informações adicionais:

FOR /F "usebackq delims=?" %i IN ('DIR /B /A:D') DO 7z.exe a "%i.7z" "%i"

Isso funciona por causa de algumas peças do que parece mágica:

  • /F informa FOR para iterar sobre o valor expandido em ()
  • usebackq informa para que eu passe um comando e use a saída para iterar
  • delims=? informa para FOR que eu quero separar os tokens em ? - um caractere ilegal em nomes de arquivos e diretórios. Eu só quero um token.
  • O /B em DIR é para o formato em - apenas o nome
  • O /A:D em DIR é para restringir os resultados por atributo, o D é para diretórios

Se você quiser encapsular isso dentro de um arquivo de lote, a única mudança que você precisará fazer é duplicar a variável% i:

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
    
por 18.07.2011 / 19:14
11

Eu gosto da resposta de Goyuix. No entanto, se você estiver usando o Windows 7 (ou tiver o Power Shell instalado) e também usar a versão de linha de comando do 7-zip, 7za.exe, poderá executar este comando:

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

Você também pode alterar "dir" para "dir * .exe" para selecionar apenas arquivos executáveis.

Uma coisa boa sobre o Power Shell é que você está trabalhando com objetos em vez de strings. Então você poderia ser realmente específico se quisesse. Por exemplo:

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

Isso incluirá apenas arquivos que:

  1. tem uma extensão csv
  2. menos de 18.900 bytes de tamanho
  3. última modificação em ou após 7/1/2011

EDITAR Se você quiser arquivos zip em vez de arquivos 7-zip, use zip.exe do InfoZip .

    
por 18.07.2011 / 19:33
0

Você pode baixar e instalar o plugin 7zip para o Total Commander do link Depois de fazer isso no lado direito da janela da captura de tela, haverá outra seleção para compactação de 7zip. Com essa opção, você pode realizar exatamente o que está pedindo.

    
por 11.10.2013 / 17:43