Tom's Guide > Forum > Programmation > Probleme avec le Batch

Probleme avec le Batch

Forum Programmation : Probleme avec le Batch

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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:

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


Quelqu'un aurait une idée?

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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


Message édité par tomtom30 le 15-10-2008 à 12:41:03
Répondre à tomtom30

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!^^


Message édité par link258 le 15-10-2008 à 18:01:19
Répondre à link258

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

Répondre à tomtom30

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

Code :
  1. @echo off
  2. if '%1'=='*' goto debut
  3. if '%1'=='+' goto fin
  4. if '%1'=='-' goto enlever
  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. goto end
  11. if '%2' =='' goto error
  12. if not exist '%2' goto erreur
  13. :erreur
  14. echo.
  15. echo Nom de repertoire invalide
  16. echo.
  17. goto end
  18. :debut
  19. if '%2' =='' goto erreur
  20. if not exist %2 goto erreur
  21. set path=%2;%path%
  22. goto nouveau
  23. :fin
  24. if '%2' =='' goto erreur
  25. if not exist %2 goto erreur
  26. set path=%path%;%2
  27. goto nouveau
  28. :enlever
  29. if '%2' =='' goto erreur
  30. if not exist %2 goto erreur
  31. set path=%path:%2=%
  32. :nouveau
  33. echo.
  34. echo Voici le nouveau path: %path%
  35. echo.
  36. :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!

Répondre à link258

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 ;)


Message édité par CRicky le 15-10-2008 à 19:49:02
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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


Message édité par tomtom30 le 15-10-2008 à 20:11:51
Répondre à tomtom30

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

Répondre à link258

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

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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

Code :
  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=\"

Répondre à link258

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:

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

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 ? ;)


Message édité par CRicky le 17-10-2008 à 19:58:48
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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!^^

Répondre à link258
Tom's Guide > Forum > Programmation > Probleme avec le Batch
Aller à :

Il y a 852 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens