Vous pouvez capturer les variables d'environnement du système avec un vbs script, mais vous avez besoin d'un bat script pour modifier réellement les variables d'environnement actuelles, c'est donc une solution combinée.
Créez un fichier nommé resetvars.vbs
contenant ce code, et le sauvegarder sur le chemin :
Set oShell = WScript.CreateObject("WScript.Shell")
filename = oShell.ExpandEnvironmentStrings("%TEMP%\resetvars.bat")
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set oFile = objFileSystem.CreateTextFile(filename, TRUE)
set oEnv=oShell.Environment("System")
for each sitem in oEnv
oFile.WriteLine("SET " & sitem)
next
path = oEnv("PATH")
set oEnv=oShell.Environment("User")
for each sitem in oEnv
oFile.WriteLine("SET " & sitem)
next
path = path & ";" & oEnv("PATH")
oFile.WriteLine("SET PATH=" & path)
oFile.Close
créer un autre fichier nommé resetvars.bat contenant ce code, même emplacement :
resetvars.vbs
call "%TEMP%\resetvars.bat"
Lorsque vous souhaitez rafraîchir les variables d'environnement, il suffit d'exécuter resetvars.bat.
Apologétique :
Les deux principaux problèmes que j'ai rencontrés en élaborant cette solution sont les suivants : a. je n'ai pas trouvé de moyen direct d'exporter les variables d'environnement d'un script vbs script vers l'invite de commande, et b. la variable d'environnement PATH est une concaténation des variables PATH de l'utilisateur et du système.
Je ne suis pas sûr de la règle générale concernant les conflits de variables entre l'utilisateur et le système, j'ai donc choisi de faire en sorte que l'utilisateur prévale sur le système, sauf pour la variable PATH qui est gérée spécifiquement.
J'utilise le mécanisme bizarre vbs+bat+bat temporaire pour contourner le problème de l'exportation des variables depuis vbs.
Note : ce script ne supprime pas les variables.
Cela peut probablement être amélioré.
ADDED
Si vous devez exporter l'environnement d'une fenêtre cmd à une autre, utilisez ce script (appelons-le exportvars.vbs
) :
Set oShell = WScript.CreateObject("WScript.Shell")
filename = oShell.ExpandEnvironmentStrings("%TEMP%\resetvars.bat")
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set oFile = objFileSystem.CreateTextFile(filename, TRUE)
set oEnv=oShell.Environment("Process")
for each sitem in oEnv
oFile.WriteLine("SET " & sitem)
next
oFile.Close
Exécuter exportvars.vbs
dans la fenêtre que vous voulez exporter de puis passez à la fenêtre que vous voulez exporter. à et le type :
"%TEMP%\resetvars.bat"
47 votes
En fait, chaque programme qui a besoin de les voir doit être redémarré. L'environnement est copié dans la mémoire du processus au démarrage et n'a donc plus aucun lien avec les envvars définies par le système.
20 votes
Après les avoir lues, j'ai réalisé que il n'y a pas de cuillère ;) dans le monde réel, il suffit de redémarrer cmd.
0 votes
Ce n'est pas une commande, donc pas tout à fait une réponse, mais il y a un support pour cela en utilisant l'API Win32 si je lis correctement ce qui suit : support.microsoft.com/fr/us/help/104011/ Il devrait être capable de compiler cette ligne dans un simple programme C et de l'exécuter en suivant les mises à jour des variables d'environnement.
1 votes
WM_SETTINGCHANGE (l'api win32 mentionnée par @CharlesGrunwald) ne fonctionne pas pour cmd.exe Windows selon ce fil de discussion : github.com/chocolatey/choco/issues/1589 -- c'est la raison pour laquelle ils ont écrit la commande refreshenv.