windows - Indstil en vedvarende miljøvariabel fra cmd.exe

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er nødt til at indstille miljøvariabler på forskellige Windows-maskiner, men jeg vil ikke gider at ændre dem manuelt ved at komme på egenskabsskærmen for 'My Computer'


Jeg vil gøre det fra kommandolinjen, med en batchfil. Så vidt jeg forstår, vil brugen af ​​sæt kun ændre variablen for de processer, jeg vil ringe i kommandovinduet.


Jeg vil sætte det helt sikkert, så senere, når jeg kører en ny proces, vil den bruge de nye indstillinger, jeg har sat. Er der en måde at gøre det fra kommandolinjen?

Bedste reference


MSDN-dokumentationen for miljøvariabler fortæller dig, hvad du skal gøre: [3]



  For at programmere tilføje eller ændre systemmiljøvariabler, skal du tilføje dem i registretøglen HKEY\_LOCAL\_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Miljø og derefter sende en WM\_SETTINGCHANGE meddelelse med lParam-sæt til strengen 'Miljø'. Dette tillader applikationer, som f.eks. Skallen, at hente dine opdateringer.



Du skal selvfølgelig have administratorrettigheder til at gøre dette. Jeg ved ikke om at sende en Windows-besked fra Windows-batch, så du skal skrive et lille program for at gøre dette.

Andre referencer 1


Brug SETX kommandoen (bemærk 'x' suffiks) for at indstille variabler, der vedvarer efter at cmd vinduet er lukket. [4]


Selv om det er værd at læse de 'noter', der vises, hvis du udskriver brugen (setx /?), især:



  2) På et lokalt system vil variabler oprettet eller ændret af dette værktøj være tilgængelige i kommende kommandovinduer, men ikke i det nuværende CMD.exe kommandovindue.

  
  3) På et fjernsystem vil variabler, der oprettes eller ændres af dette værktøj, være tilgængelige ved næste logonsession.



I PowerShell, kommandoen [[Environment]] :: SetEnvironmentVariable. [5]

Andre referencer 2


' 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