Votre question

Probleme avec le Batch

Tags :
  • Echo
  • Programmation
Dernière réponse : dans Programmation
15 Octobre 2008 08:32:26

Je sais pas si y'en a qui s'y connaisse ici, mais la je suis tellement désespérer que je m'essaie quand même!

C'est pour un travail en info et il faut créé un fichier .cmd. C'est ça l'énoncer:

Vous devez créer un fichier pa.cmd qui permettra d'enlever un chemin du PATH, ajouter un chemin existant au début du Path et ajouter un chemin existant à la fin du Path.

Exemple:

pa + c:\windows ajouter à la fin
pa * c:\windows ajouter au début
pa - c:\windows enlève du path



J'ai trouvé pour ajouter au début et à la fin, mais pour enlever, je vois vraiment pas... :|

Ça l'air de ça pour le moment:

  1. if '%1'=='*' goto debut
  2. if '%1'=='+' goto fin
  3. if '%1'=='-' goto enlever
  4.  
  5. echo.
  6. echo Vous devez choisir entre + et *
  7. echo Pour ajouter un chemin au debut du path, utiliser *
  8. echo Pour ajouter un chemin au la fin du path, utiliser +
  9. echo.
  10.  
  11. goto end
  12.  
  13. if '%2' =='' goto error
  14. if not exist '%2' goto erreur
  15.  
  16. :erreur
  17. echo.
  18. echo Nom de repertoire invalide
  19. echo.
  20. goto end
  21.  
  22. :debut
  23. if '%2' =='' goto erreur
  24. if not exist %2 goto erreur
  25. set path=%2;%path%
  26. goto nouveau
  27.  
  28. :fin
  29. if '%2' =='' goto erreur
  30. if not exist %2 goto erreur
  31. set path=%path%;%2
  32. goto nouveau
  33.  
  34. :enlever
  35. if '%2' =='' goto erreur
  36. if not exist %2 goto erreur
  37. ?
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44. :nouveau
  45. echo.
  46. echo Voici le nouveau path: %path%
  47. echo.
  48.  
  49. :end

Quelqu'un aurait une idée?

Autres pages sur : probleme batch

15 Octobre 2008 12:29:17

Bonjour,
Dans ton enoncé la notion " enleve du path " n'est pas claire.

"ex : pa - c:\windows enlève du path" mais enleve quoi ??
le c:\windows?? impossible ton path commence toujours de la racine.

Tu peux éclairer ce point ?

A moins que ton exercice consiste juste a travailler sur un chemin meme si il n'est pas valide a la fin.

Si c'est ca alors il faut que tu lise ton %path% et que tu remplace la valeur d'entrée par rien ce qui donnerais:

set path=%path:%2=%
ce qui remplace ton entrée %2 par "rien" et la met dans la variable %path%

Voila la réponse d'un simple commercial... :) 

J'espere que ca t'aidera
15 Octobre 2008 17:57:03

Le enlève du Path n'est pas inclus dans le programme! :p  Et le C:\windows n'est qu'un exemple! Ce qu'il faut faire, c'est que quand on entre un chemin du path, qu'il soit n'importe ou, il doit s'enlever!




Mais pour ta réponse, je vais aller essayer ça! Merci!^^
Contenus similaires
15 Octobre 2008 18:02:46

alors la solution que je t'ai donnée est bonne
15 Octobre 2008 18:16:16

Alors, si j'ai bien compris, si je l'ajoute a mon programme, et ça donnerais sa?

  1. @echo off
  2. if '%1'=='*' goto debut
  3. if '%1'=='+' goto fin
  4. if '%1'=='-' goto enlever
  5.  
  6. echo.
  7. echo Vous devez choisir entre + et *
  8. echo Pour ajouter un chemin au debut du path, utiliser *
  9. echo Pour ajouter un chemin au la fin du path, utiliser +
  10. echo.
  11.  
  12. goto end
  13.  
  14. if '%2' =='' goto error
  15. if not exist '%2' goto erreur
  16.  
  17. :erreur
  18. echo.
  19. echo Nom de repertoire invalide
  20. echo.
  21. goto end
  22.  
  23. :debut
  24. if '%2' =='' goto erreur
  25. if not exist %2 goto erreur
  26. set path=%2;%path%
  27. goto nouveau
  28.  
  29. :fin
  30. if '%2' =='' goto erreur
  31. if not exist %2 goto erreur
  32. set path=%path%;%2
  33. goto nouveau
  34.  
  35. :enlever
  36. if '%2' =='' goto erreur
  37. if not exist %2 goto erreur
  38. set path=%path:%2=%
  39.  
  40.  
  41.  
  42.  
  43.  
  44. :nouveau
  45. echo.
  46. echo Voici le nouveau path: %path%
  47. echo.
  48.  
  49. :end


Parce qu'en fesant cela, sa met le Path à =2! Je suis sur que je fait quelque chose de pas correcte...! Disons que je suis pas mal débutant en Batch alors je galère pas mal!
a b L Programmation
15 Octobre 2008 19:48:49

Pour faire ça bien, il suffit de faire un FOR /F sur la commande 'echo %PATH%' avec comme délimiteur le ';'.
Dans le for, tu refais un FOR /F pour découper sur les caractères délimiteurs '\' et ' " ', afin d'analyser le chemin réel (car "C:\windows\" est la même chose que "C:\windows")


Citation :
alors la solution que je t'ai donnée est bonne

Non en fait, elle a une faille. Si dans le PATH, tu as "C:\TEST0;C:\TEST0\TEST1", et que tu souhaites enlever "C:\TEST0", au final, il te resteras ";\TEST1", ce qui peut poser problème ;) 
15 Octobre 2008 20:09:04

Apparement le commande ne fonctionne pas si tu as une variable ( %2 ) a la place de ce que tu veux enlever.
jai fait plein de test mais j'ai toujours une erreur.

dsl

ps: je voulais repondre avant toi cricky ( tenter ma chance )
mais fouarer lol ....
15 Octobre 2008 20:09:22

Je sais que je t'en demande beaucoup, mais sa serait possible que tu me l'ajoute dans mon code? Parce que les FOR le prof nous en a jamais parler, et je comprends pas vraiment... Et la le travail et à remette pour demain et toute la classe d'info compte sur moi pour amener la réponse car personne l'a trouver encore! XD
a b L Programmation
16 Octobre 2008 21:12:33

Ne pense pas que je vais faire ton boulot :D 

Tiens un lien qui peut t'intéresser: http://fr.wikibooks.org/wiki/DOS/For
J'y avais expliqué l'utilisation du FOR dans les détails (car on me le demandait souvent ici).
Regarde le paragraphe 7 pour appliquer le FOR sur le retour d'une commande (dans ton cas, un simple ECHO), et le paragraphe 6.1 pour les options de découpage (avec délimiteur ; ou \).
Si tu n'y arrives pas, montre ton code. :) 

ps: des cours d'informatiques où l'on apprend le batch ? je n'en vois pas l'intérêt. :) 
17 Octobre 2008 04:00:26

Moi non plus je n'en vois pas trop l'intérêt d'ailleurs mais bon...

Pour l'instant j'ai trouver ça, je ne sais pas si je suis sur la bonne piste ou non...

  1. :enlever
  2. if '%2' =='' goto erreur
  3. if not exist %2 goto erreur
  4. FOR /f "delim=;" %%2 in ('path) do 'echo %PATH%'
  5. FOR/f "delims=" delims=\"
a b L Programmation
17 Octobre 2008 19:36:45

ce que tu mets après de in c'est la commande donc ...in ('echo %%path%%') do (
Ensuite il faut utiliser la variable d'itération %%A, pour avoir un découpage sur %%A, %%B ,etc.

Un exemple pour que tu comprennes mieux:
  1. @echo off
  2.  
  3. for /F "tokens=1,2,4,5,6,7,8* delims=;" %%A in ('echo %%PATH%%') do (
  4. echo chemin 1 = %%A
  5. echo chemin 2 = %%B
  6. echo chemin 3 = %%C
  7. echo chemin 4 = %%D
  8. echo chemin 5 = %%E
  9. echo chemin 6 = %%F
  10. echo chemin 7 = %%G
  11. echo chemins restants = %%H
  12. )


En fait le mieux c'est de faire quelque chose de récursif (en fait 2 boucles imbriquées suffisent). D'abord tu ne travailles pas directement sur %PATH% mais sur une variable intermédiaire. Ensuite, tu découpes seulement en récupérant le premier et le reste (tokens=1,2*), donc dans %%A tu as le premier chemin, et dans %%B le reste. Tu mets le reste (%%B) dans ta variable temporaire et tu recommences. Tu t'arrêtes lorsque tu as trouvé ou lorsque %%B est vide.
Si tu trouves, il faut reconstruire le PATH.
Dans un premier temps, ne t'occupe pas du découpage des \, ça viendra après.

Finalement, ce n'est pas simple comme exercice si on veut le faire proprement. Ton prof sait vraiment résoudre ça ? ;) 
18 Octobre 2008 00:34:20

Serieusement, c'est un cinglé le prof, on a rien vu sur la matière ou presque... Et personne l'a réussi finalement. Alors je vais attendre au prochain cours je crois, voir ce qui va nous dire! XD


Mais merci pour les infos, je vais essayer ça!^^
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS