Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[Resolu]Une ptite boucle for /l qui m'énerve
Auteur Message
Répondre en citant
Message [Resolu]Une ptite boucle for /l qui m'énerve 
Salut tout le monde,

pour m'entrainer j'ai fais un petit code avec une boucle for /l qui décale un caractère progressivement vers la droite.
C'est pour m'entrainer à faire des graphiques.
Bon ce code n'est qu'un essai, la boucle s'effectue 12 fois.

Voici le code :

Code:

@echo off
set "S= "
:debut
for /l %%A in ( 0, 1, 12) do (
 set S= %S%
 echo %%A:%S%i
 timeout /t 1 /nobreak>nul
)
:fin
echo termine
pause



Le problème est que la variable %S% ne se décale pas à chaque tour de boucle.
Le second problème étant que j'ai déja fait un code de ce genre pour un compte à rebours.
Le voici :

Code:

@echo off
set  /p "COMP=Entrez le compte à rebours : "
set "S= "
:debut
for /l %%A in ( 1, 1, %COMP% ) do (
 echo %S%%COMP%
 set /a COMP= COMP - 1
 set S= %S%
 timeout /t 1 /nobreak > nul
 goto :debut
)
set S= %S%
echo %S%Termine
pause>nul
goto :debut


Et lui il fonctionne très bien



Dernière édition par Guerrion24 le Dim 31 Oct 2010 - 09:31; édité 1 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Resolu]Une ptite boucle for /l qui m'énerve 
Alors je ne connait pas la cause du probléme mais je sais que cela a un lieu avec les %%


Voici un le code avec les !! :
Code:

@echo off
setlocal enabledelayedexpansion
set "S= "
:debut
for /l %%A in ( 0, 1, 12) do (
   set "S= !S!"
   echo %%A:!S!i
   timeout /t 1 /nobreak>nul
)
:fin
echo termine
pause


Il y a setlocal pour que cela fonctionne.



Répondre en citant
Message [Resolu]Une ptite boucle for /l qui m'énerve 
hello !

Groovitron a écrit:
Alors je ne connait pas la cause du probléme mais je sais que cela a un lieu avec les %%


Voici un le code avec les !! :
Code:

@echo off
setlocal enabledelayedexpansion
set "S= "
:debut
for /l %%A in ( 0, 1, 12) do (
   set "S= !S!"
   echo %%A:!S!i
   timeout /t 1 /nobreak>nul
)
:fin
echo termine
pause


la raison du problème est que une variable entourée par des %% est remplacée par ça valeur lors de la lecture de la ligne. le problème c'est que dans une boucle for, les instructions ne sont lues qu'une seule fois et exécutées à l'infini, donc sans les !! c'est un peut comme si il se passait ça :
Code:

set "S= "
for /l %%A in ( 0, 1, 12) do (
   set "S=  "
   echo %%A i
   timeout /t 1 /nobreak>nul
)

pour remedier à ce problème, les !! permettent de remplacer la variable à l'execution de la ligne et non à la lecture, ce qui permet que la valeur de la variable change au cours de la boucle

bonne journéé




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Resolu]Une ptite boucle for /l qui m'énerve 
Je comprends merci de m'avoir aidé mais alors pourquoi mon second code fonctionne ?



Répondre en citant
Message Re: Une ptite boucle for /l qui m'énerve 
hello!

Guerrion24 a écrit:
Code:

@echo off
set  /p "COMP=Entrez le compte à rebours : "
set "S= "
:debut
for /l %%A in ( 1, 1, %COMP% ) do (
   echo %S%%COMP%
   set /a COMP= COMP - 1
   set S= %S%
   timeout /t 1 /nobreak > nul
   goto :debut
)
set S= %S%
echo %S%Termine
pause>nul
goto :debut


Si ce code fonctionne c'est grâce à une particularité de la commande set /a. En fait, la command set /a est faite pour de calculs arithmétiques donc si la commande tombe sur une chaine caractères non-numériques, elle considère qu'il s'agit d'un nom de variable et remplace la chaine par la valeur qui lui est associée. Mais si tu avais fais ceci, ça ne fonctionnerait pas:

Code:

@echo off
for /l %%A in ( 1, 1, %COMP% ) do (
   echo %S%%COMP%
   set /a COMP= %COMP% - 1
   set S= %S%
   timeout /t 1 /nobreak > nul
   goto :debut
)


bonne journée




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Message [Resolu]Une ptite boucle for /l qui m'énerve 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch