173 votes

Définir une variable d'environnement persistant à partir de cmd.exe

J'ai pour définir des variables d'environnement sur les différentes machines windows, mais je ne veux pas être pris la peine de les changer manuellement par arriver sur l'écran des propriétés de "Mon Ordinateur"

Je veux le faire à partir de la ligne de commande, avec un fichier de commandes. Comme je le comprends, à l'aide de jeu ne changera la variable pour le processus, je vais l'appeler dans la fenêtre de commande.

Je veux le mettre définitivement, de sorte que plus tard, lors de l'exécution d'un nouveau processus, il va utiliser ces nouveaux paramètres que j'ai mis. Est-il un moyen de le faire à partir de la ligne de commande ?

252voto

Vik David Points 1242

Utilisez la commande SETX (notez le suffixe "x") pour définir les variables qui persistent après la fermeture de la fenêtre cmd.

24voto

David Heffernan Points 292687

La documentation MSDN pour les variables d'environnement vous dit quoi faire:

Ajouter par programmation ou modifier les variables d'environnement système, les ajouter à la HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment clé de registre, puis diffuser un WM_SETTINGCHANGEmessage avec lParam ensemble de la chaîne "Environnement". Cela permet applications, telles que la coquille, ramasser vos mises à jour.

Vous aurez bien sûr besoin des droits d'admin pour ce faire. Je ne connais aucun moyen de diffuser un message de windows à partir de Windows lot de sorte que vous aurez besoin d'écrire un petit programme en ce sens.

4voto

jacanterbury Points 446

... sa lecture des "notes" affichées si vous imprimez l'utilisation [ setx /? ], notamment:

2) Sur un système local, les variables créées ou modifiées par cet outil seront disponibles dans les futures fenêtres de commande, mais pas dans la fenêtre de commande CMD.exe actuelle.

3) Sur un système distant, les variables créées ou modifiées par cet outil seront disponibles à la prochaine session.

1voto

Justin Peal Points 11
' SetVar.vbs
Sub sety(wsh, action, typey, vary, value)
  Dim wu
  Set wu = wsh.Environment(typey)
  wui = wu.Item(vary)
  Select Case action
    Case "ls"
      WScript.Echo wui
    Case "del"
      On Error Resume Next
      wu.remove(vary)
      On Error Goto 0
    Case "set"
      wu.Item(vary) = value
    Case "add"
      If wui = "" Then
        wu.Item(vary) = value
      ElseIf InStr(UCase(";" & wui & ";"), UCase(";" & value & ";")) = 0 Then
        wu.Item(vary) = value & ";" & wui
      End If
    Case Else
      WScript.Echo "Bad action"
  End Select
End Sub

Dim wsh, args
Set wsh = WScript.CreateObject("WScript.Shell")
Set args = WScript.Arguments
Select Case WScript.Arguments.Length
  Case 3
    value = ""
  Case 4
    value = args(3)
  Case Else
    WScript.Echo "Arguments - 0: ls,del,set,add; 1: user,system, 2: variable; 3: value"
    value = "```"
End Select
If Not value = "```" Then
  ' 0: ls,del,set,add; 1: user,system, 2: variable; 3: value
  sety wsh, args(0), args(1), UCase(args(2)), value
End If

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X