Batch arquiva várias pastas com 7-zip para outro diretório

0

Em referência a este maravilhoso trabalho :

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

Eu não posso descobrir onde colocar o diretório de saída. Eu quero arquivar em lote de meus discos rígidos externos, a maioria dos quais são completamente preenchidos. Então eu preciso mudar o diretório de saída para outra unidade.

Consegui encontrar uma maneira de fazer isso com a seguinte linha de comando:

for /d %X in (*) do "c:\Program Files-Zipz.exe" a -tzip "<destinationPath>\%X.zip" "%X\"

No entanto, o arquivo em lote acima seria realmente útil, pois eu poderia simplesmente colocar quantas pastas nele, pois tenho espaço de armazenamento extra, depois movo os arquivos e prossigo com o próximo lote.

No Windows aqui pelo caminho, por favor, tenha paciência comigo.

    
por FOSSFreak 29.08.2018 / 19:28

1 resposta

1

O comando 7z no arquivo em lote que você forneceu usa o caminho completo do arquivo de entrada para obter o arquivo de saída.

Para alterar isso, você pode alterar "%~1.zip" para "<destinationPath>\%~nx1.zip" conforme mostrado abaixo ou para "<destinationPath>\%~n1.zip" se você não precisar que a extensão do arquivo original esteja no novo nome de arquivo.

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

Para esclarecimentos:

  • %~1 representa o nome completo do caminho da primeira entrada (ex: C: \ my \ caminho \ texto.txt)
  • %~n1 representa o nome do arquivo somente da primeira entrada (ex: texto)
  • %~x1 representa a extensão apenas da primeira entrada (ex: .txt)
  • Esses dois são combinados em %~nx1 , que representa o nome do arquivo e a extensão da primeira entrada (ex: test.txt)
por 29.08.2018 / 19:43