Batch boucle if
F41NT
-
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai creer un petit script en batch que j'avais fait en bash. Cependant celui-ci ne marche pas. Il me semble etre tres pres du but.. il y a t-il une personne qui sache la reponse?
merci.
voila le script:
@echo off
set /p nombre_entre_par_user=Quel est le nombre mystere ?
set variable=%random%
if /I (%nombre_entre_par_user%)LSS(%random%)(goto :A)
if /I (%nombre_entre_par_user%)GTR(%random%)(goto :B)
if /I (%nombre_entre_par_user%)EQU(%random%)(goto :C)
:A
echo "Le nombre mystere est plus grand."
:B
echo "Le nombre mystere est plus petit."
:C
echo "Vous avez trouver le nombre mystere."
echo.
pause
J'ai creer un petit script en batch que j'avais fait en bash. Cependant celui-ci ne marche pas. Il me semble etre tres pres du but.. il y a t-il une personne qui sache la reponse?
merci.
voila le script:
@echo off
set /p nombre_entre_par_user=Quel est le nombre mystere ?
set variable=%random%
if /I (%nombre_entre_par_user%)LSS(%random%)(goto :A)
if /I (%nombre_entre_par_user%)GTR(%random%)(goto :B)
if /I (%nombre_entre_par_user%)EQU(%random%)(goto :C)
:A
echo "Le nombre mystere est plus grand."
:B
echo "Le nombre mystere est plus petit."
:C
echo "Vous avez trouver le nombre mystere."
echo.
pause
A voir également:
- Batch boucle if
- Fichier batch - Guide
- Batch converter - Télécharger - Photo & Graphisme
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
- Batch renommer une partie du nom de plusieurs fichiers ✓ - Forum Autoit / batch
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
8 réponses
Personnellement , je ferais une boucle sinon je ne vois pas trop l'interet :
(mettre random dans variable pour ensuite tester random ??... je ne comprends pas trop)
@echo off
set variable=%random%
:DEBUT
set /p nombre_entre_par_user=Quel est le nombre mystere ?
if /I %nombre_entre_par_user% LSS %variable% (goto :A)
if /I %nombre_entre_par_user% GTR %variable% (goto :B)
if /I %nombre_entre_par_user% EQU %variable% (goto :C)
:A
echo "Le nombre mystere est plus grand."
goto DEBUT
:B
echo "Le nombre mystere est plus petit."
goto DEBUT
:C
echo "Vous avez trouver le nombre mystere."
PAUSE
(mettre random dans variable pour ensuite tester random ??... je ne comprends pas trop)
@echo off
set variable=%random%
:DEBUT
set /p nombre_entre_par_user=Quel est le nombre mystere ?
if /I %nombre_entre_par_user% LSS %variable% (goto :A)
if /I %nombre_entre_par_user% GTR %variable% (goto :B)
if /I %nombre_entre_par_user% EQU %variable% (goto :C)
:A
echo "Le nombre mystere est plus grand."
goto DEBUT
:B
echo "Le nombre mystere est plus petit."
goto DEBUT
:C
echo "Vous avez trouver le nombre mystere."
PAUSE
Bonjour,
Je ne comprends pas pour quelle(s) raison(s) tu souhaites effectuer plusieurs tentatives de copiages des fichiers.
Je ne comprends pas pour quelle(s) raison(s) tu souhaites effectuer plusieurs tentatives de copiages des fichiers.
En effet, si ta commande COPY est convenablement codée et que tes répertoires existent effectivement la copie s'effectuera convenablement.
Dans le cas contraire pour une erreur de syntaxe, ou si le ou les deux répertoires sont inexistants, tu auras un arrêt de l'exécution du batch accompagné d'un message d'anomalie du type :
Syntaxe du nom de fichier, de répertoire ou de volume incorrecte.
Je ne vois pas d'autres cas d'anomalie possibles, hormis peut-être un manque de place sur le disque cible, mais là aussi tu aura s un message d'anomalie.
De toutes manières ce n'est pas en multipliant les tentatives (dans une même exécution d'un batch) que tu règleras ces types de problèmes.
Malgré cela, pour répondre à ton attente, je te propose cette cinématique de fonctionnement qui présume de la non existance des répertoires source et/ou cible en gardant à l'esprit que les 3 tentatives ne serviront à rien si l'un ou les deux répertoires sont inconnus:
CLS
ECHO OFF
set /A essai = 1
:copie_fichiers
IF EXIST "C:\etats\*.txt" (
IF EXIST "D:\etats" (
rem Documentation sur la commande COPY: HELP COPY sous l'invite de commandes.
copy /V /-Y C:\etats\*.txt" /A "D:\etats" /A
GOTO :EOF ) )
IF %essai% LEQ 3 (
echo Trace pour tests: ESSAI No. %essai%
pause
set /A essai = %essai% + 1
goto copie_fichiers
)
) ELSE (
goto pb_copie_fichiers
)
:pb_copie_fichiers
echo probleme!
goto :EOF
Dans le cas contraire pour une erreur de syntaxe, ou si le ou les deux répertoires sont inexistants, tu auras un arrêt de l'exécution du batch accompagné d'un message d'anomalie du type :
Syntaxe du nom de fichier, de répertoire ou de volume incorrecte.
Je ne vois pas d'autres cas d'anomalie possibles, hormis peut-être un manque de place sur le disque cible, mais là aussi tu aura s un message d'anomalie.
De toutes manières ce n'est pas en multipliant les tentatives (dans une même exécution d'un batch) que tu règleras ces types de problèmes.
Malgré cela, pour répondre à ton attente, je te propose cette cinématique de fonctionnement qui présume de la non existance des répertoires source et/ou cible en gardant à l'esprit que les 3 tentatives ne serviront à rien si l'un ou les deux répertoires sont inconnus:
CLS
ECHO OFF
set /A essai = 1
:copie_fichiers
IF EXIST "C:\etats\*.txt" (
IF EXIST "D:\etats" (
rem Documentation sur la commande COPY: HELP COPY sous l'invite de commandes.
copy /V /-Y C:\etats\*.txt" /A "D:\etats" /A
GOTO :EOF ) )
IF %essai% LEQ 3 (
echo Trace pour tests: ESSAI No. %essai%
pause
set /A essai = %essai% + 1
goto copie_fichiers
)
) ELSE (
goto pb_copie_fichiers
)
:pb_copie_fichiers
echo probleme!
goto :EOF
Bonsoir,
Voici une version qui fonctionne chez moi Windows XP:
Voici une version qui fonctionne chez moi Windows XP:
@echo off cls set /p nombre_entre_par_user=Quel est le nombre mystere ? set variable=%random% if /I %nombre_entre_par_user% LSS %random% (goto :A) if /I %nombre_entre_par_user% GTR %random% (goto :B) if /I %nombre_entre_par_user% EQU %random% (goto :C) :A echo "Le nombre mystere est plus grand." goto :EOF :B echo "Le nombre mystere est plus petit." goto :EOF :C echo "Vous avez trouver le nombre mystere." goto :EOF
ça doit être une faute de frappe...sinon quand tu dis : Personnellement , je ferais une boucle
oui le code peut accepter une boucle mais,...à mon goût des IF enchaîner + des (GOTO ou CALL) sont plus plus appropriés pour ce genre de code...
d'autre part, fixer une limite au random ça sera plus fun..mais si le prompt DOS n'ai pas convivial pour ce genre de jeux..
oui le code peut accepter une boucle mais,...à mon goût des IF enchaîner + des (GOTO ou CALL) sont plus plus appropriés pour ce genre de code...
d'autre part, fixer une limite au random ça sera plus fun..mais si le prompt DOS n'ai pas convivial pour ce genre de jeux..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui, c'est vrai...
Sinon, tu peut fixer que le nombre %random% appartienne à un ensemble :
Par exemple, se code permet d'enregistrer ton nombre "mystère" dans une variable %NB%.
Le nombre sera compris entre 0 et 100, se qui est parfois plus simple...
Après, c'est a toi de voir...
Bye
Sinon, tu peut fixer que le nombre %random% appartienne à un ensemble :
set /a NB=%random%%%100
Par exemple, se code permet d'enregistrer ton nombre "mystère" dans une variable %NB%.
Le nombre sera compris entre 0 et 100, se qui est parfois plus simple...
Après, c'est a toi de voir...
Bye
Bonjour, j'ai un problème de comparaison d'une variable avec un chiffre (je débute en batch).
J'essaie de faire une boucle qui retourne un code d'erreur si la copie de mes fichiers échoue après 3 essais: (je ne sais pas s'il faut mettre des "" autour des noms de variables et ou de chiffres, et des () autour d'une expression):
set essai=0
:copie_fichiers
if %essai%<=3
copy C:\etats\*.txt D:\etats
echo %errorlevel%
if errorlevel 0
goto fin
elseif
%essai%="%essai%+1"
goto copie_fichiers
endif
elseif %essai%>3
goto pb_copie_fichiers
endif
:pb_copie_fichiers
echo probleme!
:fin
J'essaie de faire une boucle qui retourne un code d'erreur si la copie de mes fichiers échoue après 3 essais: (je ne sais pas s'il faut mettre des "" autour des noms de variables et ou de chiffres, et des () autour d'une expression):
set essai=0
:copie_fichiers
if %essai%<=3
copy C:\etats\*.txt D:\etats
echo %errorlevel%
if errorlevel 0
goto fin
elseif
%essai%="%essai%+1"
goto copie_fichiers
endif
elseif %essai%>3
goto pb_copie_fichiers
endif
:pb_copie_fichiers
echo probleme!
:fin
Bonsoir,
la raison de multiplier les essais de copie de ces fichiers est que cette copie se fait d'un serveur à un autre, hors je soupçonne le réseau d'être défaillant (et/ou le 2e "serveur" d'être poussif...).
Si cette copie échoue plus de X fois (avec des temps d'attente entre chaque tentative), je dois prévoir de faire remonter ce pb (par un envoi de mail au service support, surement, ca reste à voir).
Ayant eu du mal à faire ces boucles en batch, on m'a conseillé de partir sur un VBS, mais j'essaierai tes conseils malgré tout car j'avais réussi à comprendre la syntaxe des IF (parenthèses nécessaire pour plusieurs lignes, etc...)
Merci bien pour le détail du code en tout cas.
la raison de multiplier les essais de copie de ces fichiers est que cette copie se fait d'un serveur à un autre, hors je soupçonne le réseau d'être défaillant (et/ou le 2e "serveur" d'être poussif...).
Si cette copie échoue plus de X fois (avec des temps d'attente entre chaque tentative), je dois prévoir de faire remonter ce pb (par un envoi de mail au service support, surement, ca reste à voir).
Ayant eu du mal à faire ces boucles en batch, on m'a conseillé de partir sur un VBS, mais j'essaierai tes conseils malgré tout car j'avais réussi à comprendre la syntaxe des IF (parenthèses nécessaire pour plusieurs lignes, etc...)
Merci bien pour le détail du code en tout cas.