Dos : Effectuer une boucle de détection en ajoutant un compteur

[Résolu/Fermé]
Signaler
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020
-
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020
-
Bonjour,
je suis actuellement confronté au problème suivant :
Mon script doit se lancer à la condition que dans le dossier %toto% je trouve deux fichiers commençant par RES*
Si ce n'est pas le cas, le script revient sur wait, relançant le processus de détection.
Voici le script :
@REM Lancement de l'exit a la condition que les deux fichiers soient presents
:wait
set /a nbFichiers=0
for %a in (%toto%\RES*) do set /a nbFichiers+=1
if not %nbFichiers%==2 goto wait
@REM Traitement
.....

Voici mon problème :
je voudrait que cette boucle de détection s'opère un nombre limité de fois (par exemple pas plus de dix fois)
j'imagine que je dois ajouter un compteur quelquepart ?
Quelqu'un pourrait-il m'aider à résoudre cette problématique ?
Merci par avance.
K

4 réponses

Messages postés
18247
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
2 août 2021
5 334
hello
mettre le code dans une boucle
for /L %%a in (1,1,10) do (
le code ici
)
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Dubcek,
As-tu une idée comment je pourrais intégrer mon code dans la boucle que tu proposes ?
Merci.
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Bonjour Dubcek,
Tu veux dire comme ça ? :
for /L %%a in (1,1,10) do (
set /a nbFichiers=0
for %a in (%toto%\RES*) do set /a nbFichiers+=1
if %nbFichiers%==2 goto traitement
)
:traitement

Désolé, je suis un médiocre en dos ...
Messages postés
18247
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
2 août 2021
5 334
sachant que ping -n 1 127.0.0.1>NUL fait à peu près 1 sec., compter 300 dans la boucle
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

je viens de faire le test et mon script ne s'exécute pas correctement.
J'obtiens l'erreur suivante :
"2 was unexpected at this time."
Manifestement il n'apprécie pas beaucoup la ligne :
if %nbFichiers% EQU 2 goto traitement
(le chiffre 2 n'apparait nul part ailleurs)

Une idée ?
Messages postés
18247
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
2 août 2021
5 334
j'avais oublié.
pour modifier une variable dans une boucle for il faut remplacer % par !
setlocal enableDelayedExpansion
for /L %%a in (1,1,10) do (
  set /a nbFichiers=0
  for %%b in (%toto%\RES*) do set /a nbFichiers+=1
  if !nbFichiers! EQU 2 goto traitement
)
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

merci Dubcek, je vais tester cette solution.
J'imagine que je dois placer le :
setlocal disabledelayedexpansion
à la fin de la boucle, pour qu'il n'y ait pas un impact sur les variables qui se trouvent dans le traitement ?
Messages postés
18247
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
2 août 2021
5 334
non, avant la boucle
ca ne touche pas les variables %%a, %%b
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Ok donc je procède comme ça ? :
for /L %%a in (1,1,10) do (
for %a in (%toto%\RES*) do set /a nbFichiers+=1
if %nbFichiers%==2 goto traitement
)
:traitement
Messages postés
1644
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
30 juillet 2021
299
Jsais pas, ptete bien ... Si tu veux voir ce qui se passe dans ta deuxieme boucle tu mets un "echo nbFichiers = %nbFichiers%" dans ta boucle et tu lances ...
Tu verras bien si ça marche.

(Jsuis sous Linux)
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Je viens de le tester, manifestement ça ne fonctionne pas.
Le processus tourne 10x même si les deux fichiers sont présents.
Il y a certainement quelquechose que je n'ai pas compris...
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Bonjour messieurs et merci beaucoup pour votre aide.
Mon script fonctionne maintenant grace à vous !
Bonne continuation et à bientôt.
K