Come estraggo tutti gli archivi nelle sottodirectory di questa cartella?


18

Come estrarre più archivi contenuti in sottodirectory in una cartella, restituendo i risultati nelle cartelle in cui si trovano gli archivi.

Risposte:


22

Innanzitutto, installa 7-zip .

Crea un batfile nella radice della directory contenente molte sottodirectory con archivi all'interno. Quindi incollare quanto segue in:

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
)

Avvia la mazza e tutte le rar / zip verranno estratte nella cartella in cui sono contenute.

Come funziona?

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

Affinché loop esegua il loop in tutte le cartelle nella directory corrente e inserisca il percorso in una variabile %%F.

pushd% CD%

Metti la directory corrente in cui ci troviamo.

cd %% F

Imposta la cartella dalla variabile %%Fcome directory corrente.

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

Per tutti i file rare zipnella cartella corrente, eseguire:

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

Esegui 7-zip sui file. Le virgolette sono necessarie %%Xperché alcuni nomi di file contengono spazi.

popd

Ritornare alla directory precedente precedentemente memorizzata nella memoria.

Spero che questo sia utile a qualcuno.


3

Ho avuto problemi con l'esecuzione dello script da Windows Vista. Quando ho eseguito il codice non è successo nulla. Avevo bisogno di essere amministratore per poter eseguire lo script. Quando ho fatto clic con il tasto destro sul file .bat e "esegui come amministratore" non ha funzionato perché per qualche motivo è stato avviato nella cartella system32 (se ricordo bene). Per risolvere questo problema, utilizza semplicemente la variabile di ambiente Windows (spiegata qui: Variabili di ambiente Windows )% ~ dp0 per tornare alla directory da cui è stato eseguito lo script.

@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
)

Assicurarsi che nessun file * .rar o * .zip sia allo stesso livello dello script. Dovrebbero essere di un livello inferiore.

Spero che questo commento abbia aiutato qualcuno.


Questo ha funzionato bene per me. Ho dovuto cambiare il percorso in "C: \ Programmi (x86)" da "C: \ Programmi" mentre sto eseguendo 64-bit Win 7.
Contango

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

Avvia una ricerca ricorsiva nella directory corrente, trova tutti i file che terminano in .zip, quindi li convoglia in un ciclo. Per ogni file che trova, esegue un comando di decompressione sul file con l'output shuntato nella directory del file.


1

Le risposte sopra funzionano, tuttavia, se si è in esecuzione Windows 64-bite 7-Zip 32-bit, il percorso corretto è C:\Program Files (x86)\7-Zipper 7-Zip. Di seguito è la sceneggiatura che ha funzionato per me.

@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 si dispone della versione a 64 bit di 7zip, tuttavia, il percorso corretto è: "C: \ Programmi \ 7-zip \ 7z.exe" come indicato nella risposta originale.
Rohn Adams,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.