Como extraio todos os arquivos nos subdiretórios desta pasta?


18

Como extrair vários arquivos contidos em subdiretórios em uma pasta, retornando os resultados para as pastas onde estão os arquivos.

Respostas:


22

Em primeiro lugar, instale o 7-zip .

Crie um batarquivo na raiz do diretório que contém muitos subdiretórios com arquivos dentro. Em seguida, cole o seguinte em:

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.rar *.zip) DO (
            "C:\Program Files\7-zip\7z.exe" x "%%X"
        )
    popd
)

Inicie o bastão e todos os rar / zips serão extraídos para a pasta em que estão contidos.

Como é que isso funciona?

FOR / D / r %% F em ("*") DO (

For loop para percorrer todas as pastas no diretório atual e coloque o caminho em uma variável %%F.

pushd% CD%

Coloque o diretório atual em que estamos na memória.

cd %% F

Defina a pasta da variável %%Fcomo o diretório atual.

FOR %%X in (*.rar *.zip) DO (

Para todos os arquivos rare zipna pasta atual, faça:

"C:\Program Files\7-zip\7z.exe" x "%%X"

Execute 7-zip nos arquivos. As cotações são necessárias, %%Xpois alguns nomes de arquivos têm espaços.

popd

Retorne ao diretório anterior que armazenamos anteriormente na memória.

Espero que isso seja útil para alguém.


3

Ocorreu um problema ao executar o script no Windows Vista. Quando eu corri o código, nada aconteceu. Eu precisava ser administrador para poder executar o script. Quando cliquei com o botão direito do mouse no arquivo .bat e "execute como administrador", ele não funcionou porque, por algum motivo, foi iniciado na pasta system32 (se bem me lembro). Para resolver isso, basta usar a variável de ambiente do Windows (explicada aqui: Variáveis ​​de ambiente do Windows )% ~ dp0 para retornar ao diretório em que o script foi executado.

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files\7-zip\7z.exe" x %%X
    )
popd
)

Verifique se nenhum arquivo * .rar ou * .zip está no mesmo nível do script. Eles devem estar um nível abaixo.

Espero que este comentário tenha ajudado alguém.


Isso funcionou bem pra mim. Eu tive que mudar o caminho para "C: \ Program Files (x86)" de "C: \ Program Files" como eu estou correndo de 64 bits Win 7.
Contango

1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Inicia uma pesquisa recursiva no diretório atual, localiza todos os arquivos que terminam em .zip e, em seguida, canaliza isso em um loop. Para cada arquivo encontrado, ele executa um comando descompactar no arquivo com a saída desviada para o diretório do arquivo.


1

As respostas acima funcionam, no entanto, se você estiver executando Windows 64-bite 7-Zip 32-bit, o caminho correto é C:\Program Files (x86)\7-Zippara o 7-Zip. Abaixo está o script que funcionou para mim.

@echo on
cd %~dp0

FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files (x86)\7-zip\7z.exe" x %%X
    )
    popd
)

Se você possui a versão de 64 bits do 7zip, no entanto, o caminho correto é: "C: \ Arquivos de Programas \ 7-zip \ 7z.exe", conforme indicado na resposta original.
Rohn Adams 04/07
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.