Une itération à travers des dossiers et des fichiers dans le fichier batch?

Voici ma situation. Un projet qui a pour objectif de faire de la migration de certaines pièces jointes à un autre système.

Ces pièces jointes sera situé à un dossier parent, disons-le, " Folder 0 " (voir cette question du diagramme pour une meilleure compréhension), et ils seront zippée/comprimé.

Je veux que mon script batch pour être appelé de la sorte:

BatchScript.bat "c:\temp\usd\Folder 0"

Je suis en utilisant 7za.exe que la ligne de commande de l'outil d'extraction.

Ce que je veux que mon script batch pour faire consiste à parcourir le "Folder 0"'s sous-dossiers, et d'en extraire toutes les ZIP contenant les fichiers dans leur dossier respectif.

Il est obligatoire que les fichiers extraits sont dans le même dossier que les fichiers ZIP. Ainsi, les fichiers contenus dans "File 1.zip" sont nécessaires "Folder 1" et ainsi de suite.

J'ai lu sur la FOR...DO commande sur Windows XP Professionnel de la Documentation du Produit - à l'Aide des Fichiers Batch.

Voici mon script:

@ECHO OFF

FOR /D %folder IN (%%rootFolderCmdLnParam) DO 
    FOR %zippedFile IN (*.zip) DO 7za.exe e %zippedFile

Je pense que j'aurais aussi besoin de changer le répertoire réel, avant d'appeler 7za.exe e %zippedFile pour l'extraction de fichiers, mais je ne peux pas comprendre comment dans ce fichier de commandes (par le biais, je sais comment faire en ligne de commande, et même si je sais que c'est la même instruction "cd").

EDIT #1

J'ai déjà reçu quelques conseils sur la ServerFault à la même question. Consultez les réponses à ce lien.

Cependant, il extrait de la racine (C:), et non à partir de la donnée en paramètre dossier.

Quelqu'un a une idée?

EDIT #2

Il semble que le script de commandes ne gère pas les dossiers et les noms de fichier contenant un caractère d'espace de manière adéquate. Quelqu'un peut confirmer ce que je pense?

EDIT #3

J'en ai besoin pour être pleinement récursive, car je ne connais pas la structure de répertoire à l'encontre de laquelle il sera utilisé.

EDIT #4.un

Avec @aphoria la solution, j'y suis presque! Le seul problème est qu'il faut disons File5.zip, récupérer le nom de fichier uniquement pour obtenir File5, crée un sous-dossier File5 et de l'extrait de la File5.zip à File5 sous-dossier, puis, il veut créer un File5 sous-dossier dans Folder 1, où il doit, au contraire, veulent créer File1 sous-dossier, à suivre mon exemple.

EDIT #4.b

Comme demandé, voici le code tel qu'il est actuellement look:

@echo off

setlocal enableextensions enabledelayedexpansion

rem
rem Display instructions when no parameter is given.
rem
if "%1" equ "" (
    echo Syntaxe : od.bat ^<directory mask>^
    echo Exemple : od.bat *
    goto :Eof
)

rem
rem Setting the PATH environment variable for this batch file for accessing 7za.exe.
rem
path=c:\temp;%PATH%

rem
rem Removing quotes from the given command line parameter path.
rem
set root=%1
set root=%root:~%1
set root=%root:~0,-1%

rem Searching directory structure from root for subfolders and zipfiles, then extracting the zipfiles into a subfolder of the same name as the zipfile.
for /F "delims==" %%d in ('dir /ogne /ad /b /s %root%') do (
    echo Traitement du dossier : "%%d"

    for /F "delims==" %%f in ('dir /b "%%d\*.zip"') do (
        rem Getting filename without extension.
        set subfolder=~n%f
        mkdir "%%d\%subfolder%"
        rem Extracting zipfile content to the newly created folder.
        7za.exe e "%%d\%%f" -o"%%d\%subfolder%"
    )
)

:Eof

endlocal

Idées de quelqu'un?

Ma conjecture est qu'il creuse une hiérarchie de répertoire à la fois. Voici l'affaire. Considérons que nous avons un Folder A dans Folder 1 (Dossier 1\A), ensuite, il recherche de Folder 1 par Folder 5, et revient Folder 1\Folder A, où l' %sous-dossier% variable bâtons avec sa dernière valeur.

L'aide de personne est grandement appréciée.

OriginalL'auteur Will Marcouiller | 2010-06-08