web-dev-qa-db-fra.com

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

Comment extraire plusieurs archives figurant dans des sous-répertoires dans un dossier, émettre les résultats dans les dossiers où sont les archives.

18
Dmitri Farkov

Premièrement, installez 7-zip .

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

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 batte, et tous les zips/zips seront extraits dans le dossier qu'ils figurent dans.

Comment cela fonctionne-t-il?

Pour/d/r %% f dans ("*") faire (

Pour boucle de boucle à travers tous les dossiers dans le répertoire actuel et placez le chemin dans une variable %%F.

pushd% cd% cd%

Placez le répertoire actuel que nous sommes dans la mémoire.

cd %% f

Définissez le dossier de la variable %%F comme le répertoire actuel.

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

Pour tous les fichiers rar et Zip dans le dossier actuel, faites:

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

Exécutez 7-Zip sur les fichiers. Des citations sont nécessaires autour de %%X Parce que certains noms de fichiers ont des espaces en eux.

popd

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

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

22
Dmitri Farkov

J'ai eu un problème d'exécution du script de Windows Vista. Quand j'ai couru le code, rien ne se passe. Je devais être administrateur pour pouvoir exécuter le script. Lorsque j'ai cliqué avec droit sur le fichier .bat et "exécuter en tant qu'administrateur", il n'a pas fonctionné car 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 du répertoire.

@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 que non * .rar ou * .zip Les fichiers sont au même niveau que le script. Ils devraient être un niveau.

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

3
Daniel P

Les réponses ci-dessus fonctionnent toutefois si vous exécutez Windows 64-bit Et 7-Zip 32-bit, Le chemin correct est C:\Program Files (x86)\7-Zip pour 7-zip. Vous trouverez ci-dessous 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
)
1
Ryan
find . -name "*.Zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Démarre une recherche récursive sur le répertoire actuel, trouve tous les fichiers se terminant par .zip, puis des tuyaux dans une boucle. Pour chaque fichier, il utilise une commande UNZIP sur le fichier avec la sortie shunted sur le répertoire du fichier.

1
Curtis Tasker