Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Modifier une variable d'environnement

35 views
Skip to first unread message

Oxiane

unread,
Jan 8, 2004, 11:45:07 AM1/8/04
to
Bonjour,

débutant en vbs, je suis un peu perdu :-(

je cherche à faire un script qui récupère une variable d'environnement, puis
qui modifie celle ci.
J'ai fait :

Set Ws = WScript.CreateObject("WScript.Shell")
Set SysEnv = Ws.Environment("PROCESS")

MsgBox "toto vaut " & SysEnv("toto")

aa=SysEnv("toto") + 1
msgbox aa

SysEnv("toto")=aa
MsgBox "toto modifie vaut " & SysEnv("toto")

si je positionnema variable toto à 5 avnt le script, celui-ci me dit bien
que la variable vaut 5 et que le résultat de mon calcul est 6.
Par contre, après le batch, ma variable vaut toujours 5.

Comment faire pour la variable soit 'durablement' mise à jour ?
Il y a certainement qqchose d'important qui m'échappe.

Merci de votre aide

--
Cordialement

Oxiane
----------------------------------------------------------
Omnia vanitas

Oxiane

unread,
Jan 8, 2004, 12:09:55 PM1/8/04
to
J'ai oublié de préciser que je suis en W2000, ç'est peut-être important.

--
Cordialement

Oxiane
----------------------------------------------------------
Omnia vanitas
www.omniavanitas.com


"Oxiane" <sq...@oxiane.net.enlever_ceci> a écrit dans le message de
news:OVxWlcg1...@tk2msftngp13.phx.gbl...

Jean-Claude BELLAMY

unread,
Jan 8, 2004, 4:53:47 PM1/8/04
to
Dans le message OVxWlcg1...@tk2msftngp13.phx.gbl,
Oxiane <sq...@oxiane.net.enlever_ceci> s'est ainsi exprimé :

> Bonjour,
>
> débutant en vbs, je suis un peu perdu :-(
>
> je cherche à faire un script qui récupère une variable
> d'environnement, puis qui modifie celle ci.
> J'ai fait :
>
> Set Ws = WScript.CreateObject("WScript.Shell")
> Set SysEnv = Ws.Environment("PROCESS")
>
> MsgBox "toto vaut " & SysEnv("toto")
>
> aa=SysEnv("toto") + 1
> msgbox aa
>
> SysEnv("toto")=aa
> MsgBox "toto modifie vaut " & SysEnv("toto")
>
> si je positionnema variable toto à 5 avnt le script, celui-ci me dit
> bien que la variable vaut 5 et que le résultat de mon calcul est 6.
> Par contre, après le batch, ma variable vaut toujours 5.
>
> Comment faire pour la variable soit 'durablement' mise à jour ?
> Il y a certainement qqchose d'important qui m'échappe.

Le maniement des variables d'environnements entre différents "shells" est un
vrai piège à c..
Si tu veux pérenniser la modif d'une variable depuis un VBS, tu dois
utiliser SYSTEM comme environnement
Set SysEnv = Ws.Environment("SYSTEM")

De plus, si tu lances le VBS dans une fenêtre de commandes, et si tu veux
vérifier cela par une commande "echo %toto%", tu dois fermer la console
actuelle puis réouvrir une autre console, et taper "echo %toto%", sinon tu
ne verrais pas de changement.

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.net
Jean-Clau...@wanadoo.fr * JC.Be...@free.fr


Jean

unread,
Jan 8, 2004, 5:05:20 PM1/8/04
to
Bonjour,

Amicalement,

'---8<---


Set Ws = WScript.CreateObject("WScript.Shell")
Set SysEnv = Ws.Environment("PROCESS")

SysEnv("toto")="5"


MsgBox "toto vaut " & SysEnv("toto")

aa=CInt(SysEnv("toto") )+ 1
msgbox aa

SysEnv("toto")=aa
MsgBox "toto modifie vaut " & SysEnv("toto")

'---8<---

Mais une variable d'envirronnement de type Process n'est valable que pour le processus en cours.
Sous Windows 2000/XP vous avez aussi accès aux types User, System et Volatile :

User : -variable pour l'utilisateur en cours
System : -variable pour la machine en cours (tout les utilisateurs), Administrateur requis
Volatile : -variable pour la session en cours (auto détruite en fin de session)

Pour la liste des variables standards accessibles via les différents types :
http://msdn.microsoft.com/library/en-us/script56/html/wsproenvironment.asp

Le type par défaut sous Windows 9x est Process (le seul disponible).
Le type par défaut sous Windows 2000 est System.

Donc je suppose que dans votre cas vous voulez utiliser une variable de type User :
Set SysEnv = Ws.Environment("USER")

Amicalement,

Jean - JMST
Belgium

"Oxiane" <sq...@oxiane.net.enlever_ceci> a écrit dans le message de news:OVxWlcg1...@tk2msftngp13.phx.gbl...

Jean

unread,
Jan 8, 2004, 5:26:11 PM1/8/04
to
Bonjour,

Amicalement,

... et comme dit Jean-Claude Bellamy : a éviter si vous compter communiquer avec des fichiers batch ... sauf si vous aimez les
codes "spaghetti" ... ;-)


Jean - JMST
Belgium


"Jean" <http://cour...@jmst.be.tf> a écrit dans le message de news:OlU%23UOj1D...@TK2MSFTNGP12.phx.gbl...

Jean

unread,
Jan 8, 2004, 5:38:17 PM1/8/04
to
Bonjour,

> Si tu veux pérenniser la modif d'une variable depuis un VBS, tu dois
> utiliser SYSTEM comme environnement
> Set SysEnv = Ws.Environment("SYSTEM")

Le type system nécessite le droit administrateur ce qui limite son utilisation.
Les types "user" et "volatile" sont plus fciles à manipuler dansdu code distribué.

Amicalement,

Jean - JMST
Belgium

> May the Force be with You!

Jean

unread,
Jan 8, 2004, 8:11:25 PM1/8/04
to
Vous pouvez aussi jeter un coup d'oeil à l'exemple que j'ai posté avant hier dans le message :

De: "sympatix" <symp...@tototele2.fr>
Objet: Mémoriser 2 zones de saisie dans 2 variables, en html
Date: lundi 5 janvier 2004 17:35

---8<---
3-sous Windows 2000/XP vous pouvez aussi envisager de stocker la valeur dans une variable d'environnement à l'aide par exemple de
l'objet WshEnvironment de WSH:
http://msdn.microsoft.com/library/en-us/script56/html/wsObjWshEnvironment.asp
(Sous Windows 9x seul le type de variable Process est dipsonible rendant cette méthode non envisageable sous ces OS).
---8<---

Amicalement,

Jean - JMST
Belgium

"Jean" <http://cour...@jmst.be.tf> a écrit dans le message de news:OlU%23UOj1D...@TK2MSFTNGP12.phx.gbl...

Oxiane

unread,
Jan 9, 2004, 4:55:59 AM1/9/04
to
Merci pour vos réponses.

Je continue néanmoins à me noyer dans les variables SYSTEM, USER, PROCESS

J'ai en fait un batch qui lance mon vbs

set toto=5
echo %toto%
CScript.exe Hello.vbs
echo %toto%
pause


Avec tous mes essais (SYSTEM, VOLATILE,USER,PROCESS), j'ai des variables
%toto% créées dans tous les sens !

PROCESS me permet bien de récupérer la valeur positionnée dans le .bat, mais
pas de la mettre à jour (le echo en sortie ma donne tjrs 5). Si je ferme ma
fenètre, et que j'en réouvre une autre, j'obtient tjrs l'ancienne valeur.
USER me permet de récupérer la valeur USER, et bien de la mettre à jour,
mais c'est la variable PROCESS qui s'affiche pas le echo.
Si j'ouvre une nouverlle fenêtre, le echo me retourne la valeur VOLATILE.
Quant à la valeur SYSTEM, impossible d'y accéder, alors que je suis
administrateur sur mon poste...


Ne voulant pas être HS sur ce NS, quelqu'un pourrait-il me fournir un lien
vers une page qui pourrait m'expliquer les régles de priorité quand une même
variable existe en system,user,etc., ainsiq ue comment positionner en batch
les variables à un niveau autre que PROCESS

Merci d'avance

--
Cordialement

Oxiane
----------------------------------------------------------
Omnia vanitas
www.omniavanitas.com


"Jean" <http://cour...@jmst.be.tf> a écrit dans le message de

news:ux60egj1...@TK2MSFTNGP09.phx.gbl...

Jean

unread,
Jan 13, 2004, 2:53:25 AM1/13/04
to
Bonjour,

je ne pense pas que ce que vous essayez de faire soit possible.
Ou alors peut être en passant par des "tampons fichiers" par exemple ... un "numéro de trapèze" :-)

Pour plus de précision sur le sujet regardez les réponses de Michael Harris dans ce post :
http://www.google.be/groups?hl=fr&lr=&ie=UTF-8&oe=UTF-8&th=829cb129345887a4&seekm=%23xd8NgqzCHA.2868%40TK2MSFTNGP12&frame=off

Sinon, si vous précisez les tenants et aboutissants de votre projet, il y a peut être une autre solution moins hasardeuse.

Amicalement,

Jean - JMST
Belgium

"Oxiane" <sq...@oxiane.net.enlever_ceci> a écrit dans le message de news:%23be$pcp1DH...@TK2MSFTNGP11.phx.gbl...


"Oxiane" <sq...@oxiane.net.enlever_ceci> a écrit dans le message de news:%23be$pcp1DH...@TK2MSFTNGP11.phx.gbl...

Oxiane

unread,
Jan 13, 2004, 8:45:55 AM1/13/04
to
Je crois que vais trouver mon bonheur sur le post.

Merci à tous !

--
Cordialement

Oxiane


0 new messages