Comment extraire toutes les archives des sous-répertoires de ce dossier?

18

Comment extraire plusieurs archives contenues dans des sous-répertoires d'un dossier, renvoyer les résultats dans les dossiers où se trouvent les archives.

HopelessN00b
la source

Réponses:

22

Tout d'abord, installez 7-zip .

Créez un batfichier à la racine du répertoire contenant de nombreux sous-répertoires avec des archives à l'intérieur. Collez ensuite les éléments suivants dans:

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
)

Lancez la chauve-souris, et tous les rar / zips seront extraits dans le dossier dans lequel ils sont contenus.

Comment cela marche-t-il?

POUR / D / r %% F dans ("*") DO (

Pour que boucle passe en boucle dans tous les dossiers du répertoire en cours et place le chemin dans une variable %%F.

pushd% CD%

Mettez le répertoire actuel dans lequel nous sommes en mémoire.

cd %% F

Définissez le dossier de variable %%Fcomme répertoire actuel.

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

Pour tous les fichiers raret zipdans le dossier actuel, procédez comme suit:

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

Exécutez 7-zip sur les fichiers. Des citations sont nécessaires %%Xcar certains noms de fichiers contiennent des espaces.

popd

Revenez au répertoire précédent que nous avions précédemment stocké dans la mémoire.

J'espère que cela sera utile à quelqu'un.

anon
la source
3

J'ai rencontré un problème lors de l'exécution du script à partir de Windows Vista. Lorsque j'ai exécuté le code, rien ne s'est produit. J'avais besoin d'être administrateur pour pouvoir exécuter le script. Lorsque j'ai cliqué avec le bouton droit sur le fichier .bat et "exécuté en tant qu'administrateur", cela n'a pas fonctionné car il a commencé pour une raison quelconque dans le dossier system32 (si je me souviens bien). Pour résoudre ce problème, utilisez simplement la variable d'environnement Windows (expliquée ici: Variables d'environnement Windows )% ~ dp0 pour revenir au répertoire à partir duquel le script a été exécuté.

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

Assurez-vous qu'aucun fichier * .rar ou * .zip n'est au même niveau que le script. Ils devraient être d'un niveau plus bas.

J'espère que ce commentaire a aidé quelqu'un.

Daniel P
la source
CA marchait bien pour moi. J'ai dû changer le chemin d'accès à "C: \ Program Files (x86)" à partir de "C: \ Program Files" car j'exécute 64 bits Win 7.
Contango
1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Démarre une recherche récursive dans le répertoire courant, trouve tous les fichiers se terminant par .zip, puis les redirige vers une boucle. Pour chaque fichier qu'il trouve, il exécute une commande de décompression sur le fichier avec la sortie shuntée dans le répertoire du fichier.

Curtis Tasker
la source
1

Les réponses ci-dessus fonctionnent cependant si vous exécutez Windows 64-bitet que 7-Zip 32-bitle chemin correct est C:\Program Files (x86)\7-Zippour 7-Zip. Voici le script qui a fonctionné pour moi.

@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
)
Ryan
la source
Cependant, si vous disposez de la version 64 bits de 7zip, le chemin correct est: "C: \ Program Files \ 7-zip \ 7z.exe" comme indiqué dans la réponse d'origine.
Rohn Adams