sintaxe para arquivar pastas individuais

0

alguém pode ajustar / editar este comando em lote para que ele vá para o diretório raiz de cada pasta antes de arquivá-lo.

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

basicamente eu tenho muitas pastas que eu quero arquivar separadamente. mas o comando batch acima arquiva a pasta individual no diretório root / main. então, extraí-los causará uma pasta duplicada.

eu preciso que seja assim. diretório principal com muitas pastas, vá para pastas individuais e arquive-as. espero que alguém ajude.

    
por Denis Macaraig 16.10.2013 / 01:09

1 resposta

0

Bem, sua descrição dos resultados desejados não é exatamente clara. Abaixo está um layout hipotético de uma árvore de diretórios.

C:\TopDir
├───Dir1
│   └───[Dir1 files]
│
├───Dir2
│   ├───SubDir2.1
│   │   └───[files]
│   │
│   ├───SubDir2.2
│   │   └───[files]
│   │
│   ├───SubDir2.3
│   │   └───[files]
│   │
│   └───[Dir2 files]
│
├───More Dirs...
│  
└───[TopDir files]

Abaixo está o que você tem depois de ter executado o comando em questão (observe que você não está removendo nenhum dos arquivos que você arquivou, então eles ainda permanecem). Você tem um monte de arquivos .zip do processo de arquivamento na pasta raiz (o que eu entendo é o que você não quer).

C:\TopDir
├───Dir1
│   └───[Dir1 files]
│
├───Dir2
│   ├───SubDir2.1
│   │   └───[files]
│   │
│   ├───SubDir2.2
│   │   └───[files]
│   │
│   ├───SubDir2.3
│   │   └───[files]
│   │
│   └───[Dir2 files]
│
├───More Dirs...
│
├───Dir1.zip
├───Dir2.zip
├───Dirx.zip...
└───[TopDir files]

Se você extrair esses arquivos Zip dessa mesma pasta (a pasta raiz), eles serão extraídos na estrutura de diretórios existente e serão avisados quando eles encontrarem uma situação de sobregravação de arquivos. Não irá criar "pasta dupla". Eu assumo por pasta dupla, você quer dizer uma estrutura deste tipo:

C:\TopDir
├───Dir1
│   ├───[Dir1 files]
│   └───Dir1
│       └───[Dir1 files]

Agora, se você mover os arquivos zip para as respectivas pastas e descompactá-los, você terá pastas duplas.

Aqui está o comando que deve fazer o que eu acho que você quer - coloque um arquivo zip do conteúdo de cada pasta nessa pasta:

for /d %%x in (*) do cd %%x && 7z a -tzip -r %%x.zip && cd..

A opção -tzip garante que o arquivo seja .zip, sendo que .7z é o formato zip padrão do 7zip. Como isso está em um arquivo de lote, você também pode construí-lo desta maneira:

for /d %%x in (*) do (
  cd %%x
  7z a -tzip -r %%x.zip
  cd..
)
    
por 08.11.2013 / 00:20