2 boucles FOR imbriquées [BATCH] - Shell/Batch - Programmation
MarshPosté le 09-12-2011 à 09:53:51
Bonjour, je débute en batch et j'ai un soucis avec mon code. Voici le but du programme: j'ai un répertoire qui contient plusieurs dossiers. Dans chacun de ces dossiers se trouvent plusieurs fichiers présent à la racine ou dans des sous-dossiers. Le but de mon batch est de mettre à la racine tous les fichiers présent dans un dossier (le mettre en plat en fait), et ça pour chacun des dossiers.
Schématiquement, ça donne ça: AVANT: répertoire>dossier1>toto.txt répertoire>dossier1>sousDossier1>titi.dat répertoire>dossier1>sousDossier2>tutu.txt répertoire>dossier2>popo.dat répertoire>dossier2>sousDossier1>pipi.txt répertoire>dossier2>sousDossier2>pupu.txt
Voici mon code (incomplet): set repFW=%CD%\repertoire\ >> je définis en dynamique où se trouve mon dossier "repertoire" FOR /F "skip=7 tokens=4 delims= " %%i IN ('dir "%repFW%*."') DO ( >> pour chaque dossiers présent dans "repertoire" je récupère le nom IF %%i NEQ octets ( >> si le nom est différent de "octets" (la commande dir renvoie octets à la fin...) set a=%repFW%%%i >> je définis "a" comme le chemin du dossier que je veux remettre à plat set b=%repFW%%%iTemp >> je définis "b" comme un dossier temporaire mkdir %b% >> je crée le dossier temporaire FOR /R %a% %%j IN (*.*) DO ( >> pour chaque fichiers présent dans "a" xcopy %%j %b% >> je les copie dans "b" ) ) ) pause
Le problème vient que le 2ieme boucle fonctionne mal car il ne me récupère pas que les fichiers d'un seul dossier (dans mon exemple: dossier1 ou dossier2) mais de plusieurs dossiers. Après je pense qu'on peut optimiser mon code car il doit pas être des plus simples... je suis sous XP.
J'espère que je me suis fait comprendre... Si quelqu'un passe par la, c'est cool. merci.
Message édité par boullette38 le 09-12-2011 à 09:55:04
Marsh Posté le 09-12-2011 à 09:53:51
Bonjour,
je débute en batch et j'ai un soucis avec mon code.
Voici le but du programme: j'ai un répertoire qui contient plusieurs dossiers. Dans chacun de ces dossiers se trouvent plusieurs fichiers présent à la racine ou dans des sous-dossiers. Le but de mon batch est de mettre à la racine tous les fichiers présent dans un dossier (le mettre en plat en fait), et ça pour chacun des dossiers.
Schématiquement, ça donne ça:
AVANT:
répertoire>dossier1>toto.txt
répertoire>dossier1>sousDossier1>titi.dat
répertoire>dossier1>sousDossier2>tutu.txt
répertoire>dossier2>popo.dat
répertoire>dossier2>sousDossier1>pipi.txt
répertoire>dossier2>sousDossier2>pupu.txt
APRES
répertoire>dossier1>toto.txt
répertoire>dossier1>titi.dat
répertoire>dossier1>tutu.txt
répertoire>dossier2>popo.dat
répertoire>dossier2>pipi.txt
répertoire>dossier2>pupu.dat
Voici mon code (incomplet):
set repFW=%CD%\repertoire\ >> je définis en dynamique où se trouve mon dossier "repertoire"
FOR /F "skip=7 tokens=4 delims= " %%i IN ('dir "%repFW%*."') DO ( >> pour chaque dossiers présent dans "repertoire" je récupère le nom
IF %%i NEQ octets ( >> si le nom est différent de "octets" (la commande dir renvoie octets à la fin...)
set a=%repFW%%%i >> je définis "a" comme le chemin du dossier que je veux remettre à plat
set b=%repFW%%%iTemp >> je définis "b" comme un dossier temporaire
mkdir %b% >> je crée le dossier temporaire
FOR /R %a% %%j IN (*.*) DO ( >> pour chaque fichiers présent dans "a"
xcopy %%j %b% >> je les copie dans "b"
)
)
)
pause
Le problème vient que le 2ieme boucle fonctionne mal car il ne me récupère pas que les fichiers d'un seul dossier (dans mon exemple: dossier1 ou dossier2) mais de plusieurs dossiers.
Après je pense qu'on peut optimiser mon code car il doit pas être des plus simples... je suis sous XP.
J'espère que je me suis fait comprendre... Si quelqu'un passe par la, c'est cool.
merci.
Message édité par boullette38 le 09-12-2011 à 09:55:04