Batch boucle if
Fermé
F41NT
-
6 nov. 2008 à 23:47
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 28 sept. 2010 à 01:25
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 28 sept. 2010 à 01:25
A voir également:
- Batch boucle if
- Fichier batch - Guide
- Boucle excel sans macro - Forum Excel
- Boucle cmd - Forum Programmation
- Freebox redémarre en boucle ✓ - Forum Freebox
- If not exist batch ✓ - Forum Autoit / batch
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
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
26 sept. 2010 à 03:32
26 sept. 2010 à 03:32
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.
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
26 sept. 2010 à 15:10
26 sept. 2010 à 15:10
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
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
7 nov. 2008 à 00:31
7 nov. 2008 à 00:31
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
SAW5
Messages postés
111
Date d'inscription
vendredi 14 novembre 2008
Statut
Membre
Dernière intervention
6 janvier 2010
7
17 déc. 2008 à 15:03
17 déc. 2008 à 15:03
ç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
Utilisateur anonyme
18 déc. 2008 à 20:58
18 déc. 2008 à 20:58
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
Skurious
Messages postés
2
Date d'inscription
vendredi 2 avril 2010
Statut
Membre
Dernière intervention
17 février 2011
27 sept. 2010 à 23:54
27 sept. 2010 à 23:54
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.
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
28 sept. 2010 à 01:25
28 sept. 2010 à 01:25
Bonsoir,
Merci pour ce retour et ces précisions. Bon courage.
Merci pour ce retour et ces précisions. Bon courage.