Définissez une variable d'environnement persistante à partir de cmd.EXE

Je dois définir des variables d'environnement sur différentes machines windows, mais je ne veux pas être dérangé de les changer manuellement en accédant à l'écran des propriétés de "poste de travail"

Je veux le faire à partir de la ligne de commande, avec un fichier batch. Pour autant que je comprenne, l'utilisation de set ne changera que la variable pour les processus que j'appellerai dans la fenêtre de commande.

Je veux le définir définitivement, donc plus tard, lors de l'exécution d'un nouveau processus, il utilisera les nouveaux paramètres que j'ai définis. Être il y a un moyen de le faire à partir de la ligne de commande ?

88
demandé sur Joey 2011-05-05 17:03:00

3 réponses

La documentation MSDN pour les variables d'environnement vous indique ce qu'il faut faire:

Pour ajouter ou modifier par programme des variables d'environnement système, ajoutez-les à la clé de registre HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment, puis diffusez un message WM_SETTINGCHANGE avec lParam défini sur la chaîne "Environment". Cela permet aux applications, telles que le shell, de récupérer vos mises à jour.

Vous allez bien sûr besoin de droits d'administrateur pour le faire. Je ne connais aucun moyen de diffuser un message windows à partir de Windows batch, vous devrez donc écrire un petit programme pour le faire.

17
répondu David Heffernan 2015-12-12 06:43:58

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

Bien que cela vaut la peine de lire les 'notes' qui sont affichées si vous imprimez l'utilisation (setx /?), en particulier:

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

3) Sur un système distant, les variables créées ou modifiées par cet outil sera disponible à la prochaine session d'ouverture de session.

Dans PowerShell, la [de l'Environnement]::Lesetenvironmentvariable commande.

144
répondu Vik David 2017-06-30 09:22:24
' 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
3
répondu Justin Peal 2013-09-30 02:50:03