[BAT] Comment forcer l'exécution au sein d'une boucle ?

Comment forcer l'exécution au sein d'une boucle ? [BAT] - Shell/Batch - Programmation

Marsh Posté le 05-05-2015 à 09:56:37    

Bonjour,
 
j'aurai une question liée à la logique d'exécution dans un fichier BAT.
 
Voici le script me permettant de récupérer la liste des lecteurs et d'exécuter un "DIR" pour chaque lecteur et le consolider dans un fichier global.

Code :
  1. @echo off
  2.       setlocal enabledelayedexpansion
  3.       WMIC LOGICALDISK where drivetype=3 get caption>%~n0.tmp
  4.       for /f "tokens=1-3 skip=1" %%a in ('type "%~n0.tmp"') do call :displayinfo %%a
  5.     del "%~n0.tmp"
  6.     echo FIN DU SCRIPT AVANT LE EOF
  7.     goto :etapefin
  8.     :displayinfo
  9.     set drive=%1
  10.     echo Le drive est %drive%
  11.     echo lancement du DIR
  12.     REM call dir /A HS /s /b %drive%\ >> d:\Dir_ALL.txt
  13.     echo Fin du DIR
  14.     :etape2
  15.     echo voici l'etape 2
  16.     echo blablalblablalballbabal
  17.     :etapefin
  18.     echo voici letape fin apres la boucle
  19.     @pause
  20.     @exit
  21.     @pause


 
 
Ce que j'aimerai est que le "call displayinfo" se fasse uniquement sur la partie ":displayinfo" mais que la partie "etape 2" et le reste du script ne soient pas inclus dans la boucle qui fait le "do call displayinfo".
 
Est-ce que quelqu'un aurait une idée de comment indiquer la fin de l'exécution d'une boucle en bat ?  
 
Merci

Reply

Marsh Posté le 05-05-2015 à 09:56:37   

Reply

Marsh Posté le 05-05-2015 à 10:13:38    

fait très rapidement mais ça a l'air de marcher: goto :EOF
 

Code :
  1. @echo off
  2. for /f %%a in (file.txt) do call :process %%a
  3. echo fin
  4. goto :EOF
  5. echo err1
  6. :process
  7. echo %1
  8. goto :EOF
  9. echo err2


 

Code :
  1. >type file.txt
  2. line1
  3. line2
  4. line3


 

Code :
  1. >test.bat
  2. line1
  3. line2
  4. line3
  5. fin

Reply

Marsh Posté le 05-05-2015 à 10:21:13    

Merci pour ta réponse; je me sens moins seul :D
 
J'avais essayé avec un :EOF mais ca n'avait rien changé.  
En fait, mon problème est que j'aimerai que la boucle du FOR /f se fasse sur une partie limitée du script et qu'ensuite je puisse passer à l'"étape2" sans que cette étape ne soit incluse dans la boucle.
 
Voilà mon script un peu plus lisible
 

Code :
  1. @echo off
  2.   setlocal enabledelayedexpansion
  3.   WMIC LOGICALDISK where drivetype=3 get caption>%~n0.tmp
  4.   for /f "tokens=1-3 skip=1" %%a in ('type "%~n0.tmp"') do call :displayinfo %%a
  5. del "%~n0.tmp"
  6. echo FIN DU SCRIPT AVANT LE EOF
  7. goto :eof
  8. :displayinfo
  9. set drive=%1
  10. echo Le drive est %drive%
  11. echo lancement du DIR
  12. REM call dir /A HS /s /b %drive%\ >> d:\Dir_ALL.txt
  13. echo Fin du DIR
  14. :etape2
  15. echo voici l'etape 2
  16. echo blablalblablalballbabal
  17. :etapefin
  18. echo voici letape fin apres la boucle
  19. @pause

Reply

Marsh Posté le 05-05-2015 à 15:52:33    

Tu veux que quand : displayinfo est appellé depuis la boucle le script retourne dans la boucle ligne 17 au lieu de continuer et d'exécuter :etape2, c'est bien ça? Alors un goto :EOF (majuscules peut-être importantes, à voir) ligne 17 devrait fonctionner? Ou ai-je mal compris?

Reply

Sujets relatifs:

Leave a Replay

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