Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1878 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [BATCH] IF ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[BATCH] IF ?

n°884754
ferty
Posté le 28-10-2004 à 11:55:07  profilanswer
 

Salut!!
 
J'ai fait un ptit script avec des goto de partout et lorsque l'utilisateur tape le nom d'un programme, le programme ce lance mais si l'utilisateur se trompe j'aimerai que le script se relance.  
 
Voila le programme:
 
@echo off
:Debut
echo.
set /p choix=Programme: %
goto %choix%
 
:Dvd
:shrink
cd\  
c:
cd Program Files
cd DVD Shrink
start /max DVDShrink3.2.exe
goto debut
 
 
 
si par exemple l'utilisateur tape "dv" au lieu de dvd j'aimerai que ca revienne au debut au lieu de fermer la fenetre dos.


Message édité par ferty le 28-10-2004 à 12:06:38
mood
Publicité
Posté le 28-10-2004 à 11:55:07  profilanswer
 

n°884784
ferty
Posté le 28-10-2004 à 12:46:06  profilanswer
 

personne ?

n°884815
Arrakeen
Posté le 28-10-2004 à 13:57:34  profilanswer
 

bah faut que tu stockes toutes tes etiquettes dans un fichier temporaire, puis tu le lis et si ta variable %choix% y est, tu fais le goto sinon tu revas au debut.
 
allé, je t'aide : pour mettre tes etiquetes dans un fichier temporaire tu peux faire :
 
findstr ":" tonfichier.bat > etiq.txt
 
apres tu parcours le fichier etiq.txt avec un
 FOR /F "parametres" %%i in (etiq.txt) do ( ..
 
je te laisse deviner la suite...
 

n°884824
Arrakeen
Posté le 28-10-2004 à 14:05:41  profilanswer
 

petite rectif, le filtre c'est plutot
 
findstr "^:" tonfichier.bat > etiq.txt  
 
pour recuperer les ':' qui sont en début de lignes...
sinon tu allais te choper les C: et compagnie...
 

n°884826
ferty
Posté le 28-10-2004 à 14:09:40  profilanswer
 

Ok merci, il n'y a pas une solution plus simple avec un if ?

n°884827
Arrakeen
Posté le 28-10-2004 à 14:11:20  profilanswer
 

nop, on peut pas checker si une etiquette existe avec un if :-(

n°884840
ferty
Posté le 28-10-2004 à 14:19:06  profilanswer
 

arf, dommage car si j'ai bien compris pour ta solution il faut mettre autant de :label que de findstr "^:" tonfichier.bat > etiq.txt   ?

n°884862
Arrakeen
Posté le 28-10-2004 à 14:38:39  profilanswer
 

bon, je suis dans un bon jour, alors essaye ceci :
 
set /p choix=Programme: %  
findstr "^:%choix%$" %0.bat >NUL
if ERRORLEVEL 0 goto %choix%
goto debut
 


Message édité par Arrakeen le 28-10-2004 à 14:45:16
n°885014
ferty
Posté le 28-10-2004 à 16:09:36  profilanswer
 

Ca ne passe pas, merci quand meme

n°885026
sircam
I Like Trains
Posté le 28-10-2004 à 16:18:15  profilanswer
 

ferty a écrit :

Ca ne passe pas, merci quand meme


Tu peux être un peu plus précis ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
mood
Publicité
Posté le 28-10-2004 à 16:18:15  profilanswer
 

n°885032
ferty
Posté le 28-10-2004 à 16:20:44  profilanswer
 

ben ca me ferme la fenetre dos comme avant

n°885083
Arrakeen
Posté le 28-10-2004 à 16:52:38  profilanswer
 

autant pour moi, le ERRORLEVEL deconne...mets ça plutot :
 
findstr "^:%choix%$" %0.bat >temp.txt  
for %%i in (temp.txt) do (
set size=%%~zi
)
if %size% EQU 0 goto debut else goto %choix%

n°885140
ferty
Posté le 28-10-2004 à 17:37:56  profilanswer
 

Il faut ajouter quelque chose dans le temp.txt ?

n°885144
Arrakeen
Posté le 28-10-2004 à 17:44:10  profilanswer
 

non. le temp.txt contient le resultat de la commande findstr...tu n'as pas à t'en preoccuper...
 
tu peux le deleter dans une etiquette :quit par ex  
(donc tu mets comme nom de programme 'quit' ;-) ça
te servira à quiter le .bat qui tourne en boucle)
 
:quit
del temp.txt

n°885245
ferty
Posté le 28-10-2004 à 19:31:38  profilanswer
 

J'ai fait un copier/coller ca ne marche pas, des choses a rajouter ?

n°885251
Arrakeen
Posté le 28-10-2004 à 19:39:01  profilanswer
 

bon, je recapitule ton programme entier
 

Code :
  1. @echo off
  2. :debut
  3. echo.
  4. set /p choix=Programme: %
  5. findstr "^:%choix%$" %0.bat >temp.txt 
  6. for %%i in (temp.txt) do (
  7. set size=%%~zi
  8. )
  9. if %size% EQU 0 goto debut else goto %choix%
  10.  
  11. :dvd
  12. :shrink
  13. cd\ 
  14. c:
  15. cd Program Files
  16. cd DVD Shrink
  17. start /max DVDShrink3.2.exe
  18. goto debut
  19. :quit
  20. del temp.txt


 
voilà, ca devrait marcher là ...mais attention, avec tes commandes :
 

Code :
  1. cd\ 
  2. c:
  3. cd Program Files
  4. cd DVD Shrink


 
tu n'est plus dans le repertoire courant pour le prochain programme à lancer !!!
 
donc je te conseille de sauvegarder le repertoire courant puis d'y revenir apres le lancement de ton programme, ou bien de lancer le programme directement :
 

Code :
  1. :shrink
  2. start /max C:\Program Files\DVD Shrink\DVDShrink3.2.exe
  3. goto debut


n°885258
ferty
Posté le 28-10-2004 à 20:00:19  profilanswer
 

alors voila ce que j'ai ecrit
 
@echo off
:debut
echo.
set /p choix=Programme: %  
findstr "^:%choix%$" %starter.bat >temp.txt    
for %%i in (temp.txt) do (  
set size=%%~zi  
)  
if %size% EQU 0 goto debut else goto %choix%  
 
 
Si je tape n'importe quoi ca me renvoie bien a mon goto debut mais si je tape un nom correct il va sur le 1er :label qu'il voit donc ca ne marche pas en gros :/


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [BATCH] IF ?

 

Sujets relatifs
Arrêt d'un batch par retour clavier (virtuel)[ Dos Batch ]Set & Type
Backup batch filebatch execution arreter lors d'un "start /wait" d'un autre bat
DOS Batch et Unicode[batch] Recherche de fichier
Résumé sur le langage Batch[Batch] Lister les erreurs lors d'un xcopy
Problème de batch...Batch + commande (débutant)
Plus de sujets relatifs à : [BATCH] IF ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR