[BATCH] 2 boucles FOR imbriquées

2 boucles FOR imbriquées [BATCH] - Shell/Batch - Programmation

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
Reply

Marsh Posté le 09-12-2011 à 09:53:51   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed