it-swarm-pt.tech

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

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

18
Dmitri Farkov

Em primeiro lugar, instale 7-Zip .

Crie um arquivo bat 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 rars/zips serão extraídos para a pasta em que estão contidos.

Como isso funciona?

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

Para que o loop passe por 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 %%F como o diretório atual.

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

Para todos os arquivos rar e Zip na pasta atual, faça:

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

Execute o 7-Zip nos arquivos. São necessárias cotações em torno de %%X porque alguns nomes de arquivos têm espaços neles.

popd

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

Espero que isso seja útil para alguém.

22
Dmitri Farkov

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.

3
Daniel P

As respostas acima funcionam, no entanto, se você estiver executando Windows 64-bit E 7-Zip 32-bit, O caminho correto será C:\Program Files (x86)\7-Zip para 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
)
1
Ryan
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
Curtis Tasker