[BATCH] IF ?

IF ? [BATCH] - Shell/Batch - Programmation

Marsh Posté le 28-10-2004 à 11:55:07    

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
Reply

Marsh Posté le 28-10-2004 à 11:55:07   

Reply

Marsh Posté le 28-10-2004 à 12:46:06    

personne ?

Reply

Marsh Posté le 28-10-2004 à 13:57:34    

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...
 

Reply

Marsh Posté le 28-10-2004 à 14:05:41    

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...
 

Reply

Marsh Posté le 28-10-2004 à 14:09:40    

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

Reply

Marsh Posté le 28-10-2004 à 14:11:20    

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

Reply

Marsh Posté le 28-10-2004 à 14:19:06    

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

Reply

Marsh Posté le 28-10-2004 à 14:38:39    

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
Reply

Marsh Posté le 28-10-2004 à 16:09:36    

Ca ne passe pas, merci quand meme

Reply

Marsh Posté le 28-10-2004 à 16:18:15    

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}
Reply

Marsh Posté le 28-10-2004 à 16:18:15   

Reply

Marsh Posté le 28-10-2004 à 16:20:44    

ben ca me ferme la fenetre dos comme avant

Reply

Marsh Posté le 28-10-2004 à 16:52:38    

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%

Reply

Marsh Posté le 28-10-2004 à 17:37:56    

Il faut ajouter quelque chose dans le temp.txt ?

Reply

Marsh Posté le 28-10-2004 à 17:44:10    

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

Reply

Marsh Posté le 28-10-2004 à 19:31:38    

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

Reply

Marsh Posté le 28-10-2004 à 19:39:01    

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


Reply

Marsh Posté le 28-10-2004 à 20:00:19    

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 :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed