Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

commande set

1 réponse
Avatar
Franck Mondin
bonjour,

j'aimerais utiliser la commande set (pour changer le chemin des variables)
par le biais d'un script mais ça ne marche pas, il n'y a pas de message
d'erreur, il y a t il une autre solution par script?

Merci de vos idées et bon été

1 réponse

Avatar
Jean-Claude BELLAMY
Franck Mondin s'est ainsi exprimé:

j'aimerais utiliser la commande set (pour changer le chemin des
variables) par le biais d'un script mais ça ne marche pas,
Si, çà marche, mais uniquement dans le "shell" créé par ton script!


il n'y a pas de message d'erreur,
Normal !

"it's not a bug, it's by design !" ;+)

il y a t il une autre solution par script?
Oui!


Petit rappel
======== Depuis la nuit des temps, sous tous les OS (y compris UNIX), quand on
définit (avec SET p.ex. chez MS) une variable d'environnement à l'intérieur
d'une session "shell" (= dans un batch, dans une fenêtre d'un processeur de
commandes - command.com , cmd.exe, cshell, ...), elle ne l'est que pour la
durée du "shell" !

Donc la commande suivante insérée dans un .bat ou .cmd
set PATH=%PATH%;c:mon-chemin-a-moi
fonctionnera, "c:mon-chemin-a-moi" sera bien ajouté au %PATH%, mais le
temps du script seulement!
(idem pour n'importe quelle autre variable d'environnement)

Les solutions
========= Si on veut que cette modification persiste, il faut utiliser une AUTRE
commande.

1) "SETX"
---------
P.ex. sous UNIX il faut ajouter le paramètre "export"
Sous NT/W2K/XP on dispose de la commande "SETX"

"SETX.EXE" est un utilitaire Microsoft, non fourni en standard avec Windows
(on se demande pourquoi!), disponible dans le NT Resource Kit (payant).
Mais il est disponible gratuitement chez Microsoft :

ftp://ftp.microsoft.com/reskit/win2000/setx.zip (15329 octets)
il fonctionne sous toute version de NT : NT4,W2K et XP

Son usage est identique à celui de la commande SET
p.ex. SETX test=c:tmp
SETX PATH=%PATH%;c:mon-chemin-a-moi

2) VBSCRIPT
------------
On peut aussi passer par un VBscript, avec l'objet "shell.environment", en
lui indiquant le paramètre "system" pour préciser que ce n'est pas une
variable d'environnement "volatile"

Exemple :
Fichier "AddPath.vbs"
----------- couper ici -----------
Set Args= Wscript.Arguments
if args.count=0 then wscript.quit
Set fso=Wscript.GetObject("Scripting.FileSystemObject")
Dossier=args(0)
If not fso.FolderExists(Dossier) then
Wscript.echo "Le dossier " & Dossier & " n'existe pas!"
Wscript.quit
end if
Set shell = WScript.CreateObject("WScript.Shell")
Set env=Shell.Environment("system")
env("Path")=env("Path") & ";" & Dossier
----------- couper ici -----------

La commande suivante (dans une fenêtre de commandes ou dans un batch)
ajoutera au PATH le dossier passé en paramètres :
cscript h:outilsscriptsaddpath.vbs "c:Windowstrucmuche"

(les guillemets sont indispensables s'il y a des espaces dans le nom du
dossier)

NB: si on a déclaré le moteur de script par défaut comme étant "CSCRIPT", et
si on a placé "addpath.vbs" dans un des chemins définis dans le PATH, on
pourra se limiter à écrire :
addpath "c:Windowstrucmuche"

On peut généraliser à toute variable d'environnement par ce script :
Fichier "SuperSet.vbs"
----------- couper ici -----------
Set Args= Wscript.Arguments
if args.count<2 then wscript.quit
Set fso=Wscript.GetObject("Scripting.FileSystemObject")
Set shell = WScript.CreateObject("WScript.Shell")
Set env=Shell.Environment("system")
env(args(0))=args(1)
----------- couper ici -----------

La définition d'une variable se fera donc par la commande :
cscript h:outilsscriptsSuperSet.vbs <nom de la variable> <valeur de
la variable>
ou (cf remarque précédente)
SuperSet <nom de la variable> <valeur de la variable>
(les guillemets sont indispensables s'il y a des espaces dans la valeur de
la variable)

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*