Problème de syntaxe dans un .bat

Problème de syntaxe dans un .bat - Win NT/2K/XP - Windows & Software

Marsh Posté le 28-10-2005 à 21:50:04    

Bonjour,
 
J'ai un script BATCH à réaliser sous environnement 16 bits :
 
Principe :

 
- Le script doit à un moment donner ajouter un chemin à la variable PATH.
   
  ---------------------------------------------
  set path=%path%;%systemroot%\%new_rep%
  ---------------------------------------------
 
 Remarque :
 ;%systemroot%\%new_rep%   vaut   ;C:\WINDOWS\extratools
 
 

- Plus loin dans le script ce même chemin doit être supprimer (on sous entend qu'un autre programme ai pu ajouter d'autres chemin à la variable PATH), on ne peut donc pas restaurer le PATH d'origine. Il faut supprimer uniquement la bonne chaine de caractère.

 
   -> J'ai donc tester plusieur syntaxe pour le code ci-dessous mais rien n'y fais
 
   -----------------------------------------------
   set path=%path:;%systemroot%\%new_rep%=%
   -----------------------------------------------
 
 
 
note : dans l'aide de DOS, on remarque que %path:ch1=ch2% permet la substitution de chaine dans une variable. Et si ch2 est une chaine vide celà a pour effet de supprimer l'occurence de ch1 dans la variable --> C'est donc bien ce qu'il faut faire, et ça marche en ligne de commande avec des chemins simple.
   
note2 : Il y'a surrement des caractères dans cette chaine qui pose problème ou même le fait qu'il y'ai des variables à l'interieur de la chaine, ..., mais ayant essayé plusieurs combinaisons ; celà fait plus de deux jours que je n'arrive pas au résultat voulu. Je désespère  :pt1cable:  :cry:  
 
D'avance merci pour votre aide qui me sera très préçieuse :jap:

Reply

Marsh Posté le 28-10-2005 à 21:50:04   

Reply

Marsh Posté le 31-10-2005 à 23:52:44    

Bonjour,
 
Voici la procédure:  
1 = sauvegarde du path d'origine dans une nouvelle variable.
2 = execution de votre programme (qui modifie le path)
3 = restitution du path d'origine quand votre programme est terminé.  
4 = effacement de la variable de sauvegarde du path d'origine.
 
----------------------------------------------------------
SET ORGPATH=%PATH%       (1ere ligne du batch)
 
<ici votre programme>
 
SET PATH=%ORGPATH%       (avant dernière ligne du batch)
SET ORGPATH=                    (dernière ligne du batch)
 
----------------------------------------------------------
 
pour intervertir des variables utilisez,
en ligne de commande:  
%variable-1%  %variable-2%
 
dans un fichier de commandes:  
%%variable-1%%  %%variable-2%%
(il faut doubler le symbole "%" )
d'où le fonctionnement en ligne de commande et pas en batch.
 
Voilà.  cordialement


Message édité par Michel2181 le 01-11-2005 à 00:01:45
Reply

Marsh Posté le 01-11-2005 à 12:42:46    

Hum, oui mais là tu remet l'ancien path, tu ne supprime pas le chemin ajouté.
 
par exemple si un autre programme ajoute aussi un ou des cheminq, avec ta manip, ça va tout virer et remettre celui de base.
 
En fait ce que je veux c'est vraiment supprimer un chemin bien précis et non pas restituer la path d'origine avec une copie de sauvegarde.

Reply

Marsh Posté le 02-11-2005 à 00:08:51    

Vi, je voyais pas ça comme ça...
 
Bon, il faut donc "jouer" avec les variables d'environnement.
 
Obligatoirement il faut sauvegarder le path original (sauf si tu n'en n'a plus besoin).  
Voila la liste des variables utilisées pour l'exemple:
 
NORMAL = path d'origine
CH1       = chemin 1 à ajouter (ou enlever)
CH2       = chemin 2 à     "           "
CH3       = chemin 3 "      "           "
 
1ere ligne:  
SET NORMAL=%PATH%
 
<ici exécution du programme qui ajoute le chemin 1> sous la forme:
SET CH1=C:\new_rép\chemin1
 
<prise en compte du nouveau chemin>
SET PATH=%NORMAL%;%CH1%;%CH2%;%CH3%;
 
Note que les variables %CH2% et %CH3% n'ont aucune valeur pour l'instant donc ne seront pas prises en compte.
 
Ajout du 2e chemin:
<ici exécution du programme qui ajoute le chemin 2> sous la forme:
SET CH2=C:\new_rép\chemin2
 
<prise en compte du nouveau chemin>
SET PATH=%NORMAL%;%CH1%;%CH2%;%CH3%;
 
Si tu veux supprimer %CH1% du path, il faut "vider" sa valeur:
SET CH1=
puis
SET PATH=%NORMAL%;%CH1%;%CH2%;%CH3%;
 
Note 1: sous DOS 16 bits, éviter des noms de variables de plus de 8 caractères, car ils risquent d'être tronqués.
 
Note 2: l'ordre des variables chemins dans la ligne PATH n'a aucune importance, toutefois il vaut mieux laissé %NORMAL% en premier car elle inclut sans doute les répertoire c:\dos.
 
Tiens moi au courant.

Reply

Marsh Posté le 04-11-2005 à 14:17:54    

Y'a de l'idée mais je crains que ça ne corresponde pas vraiment à ce que je veux faire.
 
Dans l'exemple que tu donnes, toutes les variables sont gérer par un même batch, on peut donc jouer avec sans problème, et mettre ce qu'on veut comme on veut dans la variable path (encore que les ";" ne sont pas gérés) et on risque d'avoir une variable path du genre:
PATH ==> C:\Windows\system32;C:\chemin1\balbla;;;C:\chemin_x\;
 
Parceque imagine que tu déinstalle un logiciel de ton system, tu dois donc enlever le chemin associé à ce logiciel de la variable path. Or ce chemin peut se trouver n'importe où dans la variable.
 
Donc ton system pourrait éventuellement marcher (à par les ; ) si tu peut a partir de la variable path extraire tous les chemin et les stocker dans des variable ch1, ch2, etc ... et ensuite reconstruite le tout sans le chemin que tu souhaites enlever
 
EXEMPLE :
 
PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\Fichiers communs\Autodesk Shared\;C:\Program Files\backburner 2\
 
là il faudrait que le programme extrait chaque chemin dans une variable (chose que je ne sait pas faire)
 
CH1 = C:\WINDOWS\system32;
CH2 = C:\WINDOWS;
CH3 = C:\WINDOWS\System32\Wbem;
...
...
CHx = C:\Program Files\backburner 2\
 
Ensuite reconstruire le PATH sans le CH3 par exemple
 
set PATH=%CH1%%CH2%%CH4%....%CHx%


Message édité par antolionux le 04-11-2005 à 14:22:16
Reply

Marsh Posté le 04-11-2005 à 14:21:15    

Salut,
 
Juste une petite précision : les ; consécutifs ne gênent pas.

Reply

Sujets relatifs:

Leave a Replay

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