Probleme avec le Batch
Dernière réponse : dans Programmation
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:
Quelqu'un aurait une idée?
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:
if '%1'=='*' goto debut
if '%1'=='+' goto fin
if '%1'=='-' goto enlever
echo.
echo Vous devez choisir entre + et *
echo Pour ajouter un chemin au debut du path, utiliser *
echo Pour ajouter un chemin au la fin du path, utiliser +
echo.
goto end
if '%2' =='' goto error
if not exist '%2' goto erreur
:erreur
echo.
echo Nom de repertoire invalide
echo.
goto end
:debut
if '%2' =='' goto erreur
if not exist %2 goto erreur
set path=%2;%path%
goto nouveau
:fin
if '%2' =='' goto erreur
if not exist %2 goto erreur
set path=%path%;%2
goto nouveau
:enlever
if '%2' =='' goto erreur
if not exist %2 goto erreur
?
:nouveau
echo.
echo Voici le nouveau path: %path%
echo.
:end
Quelqu'un aurait une idée?
Autres pages sur : probleme batch
Lassé par la pub ? Créez un compte
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
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
Alors, si j'ai bien compris, si je l'ajoute a mon programme, et ça donnerais sa?
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!
@echo off
if '%1'=='*' goto debut
if '%1'=='+' goto fin
if '%1'=='-' goto enlever
echo.
echo Vous devez choisir entre + et *
echo Pour ajouter un chemin au debut du path, utiliser *
echo Pour ajouter un chemin au la fin du path, utiliser +
echo.
goto end
if '%2' =='' goto error
if not exist '%2' goto erreur
:erreur
echo.
echo Nom de repertoire invalide
echo.
goto end
:debut
if '%2' =='' goto erreur
if not exist %2 goto erreur
set path=%2;%path%
goto nouveau
:fin
if '%2' =='' goto erreur
if not exist %2 goto erreur
set path=%path%;%2
goto nouveau
:enlever
if '%2' =='' goto erreur
if not exist %2 goto erreur
set path=%path:%2=%
:nouveau
echo.
echo Voici le nouveau path: %path%
echo.
: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!
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")
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
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 bonneNon 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
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
Ne pense pas que je vais faire ton boulot
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.
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.
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:
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 ?
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:
@echo off for /F "tokens=1,2,4,5,6,7,8* delims=;" %%A in ('echo %%PATH%%') do ( echo chemin 1 = %%A echo chemin 2 = %%B echo chemin 3 = %%C echo chemin 4 = %%D echo chemin 5 = %%E echo chemin 6 = %%F echo chemin 7 = %%G echo chemins restants = %%H )
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 ?
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumBatch probleme condition
- ForumProbleme de boucle for dans un batch
- ForumBatch probleme syntaxe
- ForumBatch windows probleme lecture fichier cache
- ForumProgramme batch dos probleme if
- ForumProbleme de retour avec un fichier batch
- ForumBatch, probleme de syntaxe.
- ForumBatch probleme variable et boucle for
- ForumBatch
- ForumCommande .batch
- Voir plus
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!