Установите постоянную переменную среды из cmd.exe - PullRequest
103 голосов
/ 05 мая 2011

Мне нужно установить переменные окружения на разных компьютерах с Windows, но я не хочу беспокоиться об их изменении вручную, открыв окно свойств «Мой компьютер»

Я хочу сделать это скомандная строка, с командным файлом.Насколько я понимаю, использование set только изменит переменную для процессов, которые я вызову в командном окне.

Я хочу установить это точно, поэтому позже, при запуске нового процесса, он будет использовать теновые настройки я установил.Есть ли способ сделать это из командной строки?

Ответы [ 5 ]

159 голосов
/ 05 мая 2011

Используйте команду SETX (обратите внимание на суффикс 'x'), чтобы установить переменные, которые сохраняются после закрытия окна cmd.

Хотя стоит прочитать «заметки», которые отображаются, если вы печатаете использование (setx /?), в частности:

2) В локальной системе переменные, созданные или измененные этим инструментом, будут доступны в будущих командных окнах, но не в текущем командном окне CMD.exe.

3) В удаленной системе переменные, созданные или измененные этим инструментом, будут доступны при следующем сеансе входа в систему.

В PowerShell команда [Environment] :: SetEnvironmentVariable .

18 голосов
/ 05 мая 2011

Документация MSDN для переменных среды говорит вам, что делать:

Чтобы программно добавить или изменить системные переменные среды, добавьте их в раздел реестра HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment , а затем отправьте сообщение WM_SETTINGCHANGE с lParam установить строку «Окружающая среда». Это позволяет приложениям, таким как оболочка, получать ваши обновления.

Конечно, для этого вам понадобятся права администратора. Я не знаю способа передачи сообщения Windows из пакета Windows, поэтому для этого вам нужно написать небольшую программу.

2 голосов
/ 30 сентября 2013
' 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
0 голосов
/ 26 апреля 2019
:: Sets environment variables for both the current `cmd` window 
::   and/or other applications going forward.
:: I call this file keyz.cmd to be able to just type `keyz` at the prompt 
::   after changes because the word `keys` is already taken in Windows.

@echo off

:: set for the current window
set APCA_API_KEY_ID=key_id
set APCA_API_SECRET_KEY=secret_key
set APCA_API_BASE_URL=https://paper-api.alpaca.markets

:: setx also for other windows and processes going forward
setx APCA_API_KEY_ID     %APCA_API_KEY_ID%
setx APCA_API_SECRET_KEY %APCA_API_SECRET_KEY%
setx APCA_API_BASE_URL   %APCA_API_BASE_URL%

:: Displaying what was just set.
set apca

:: Or for copy/paste manually ...
:: setx APCA_API_KEY_ID     'key_id'
:: setx APCA_API_SECRET_KEY 'secret_key'
:: setx APCA_API_BASE_URL   'https://paper-api.alpaca.markets'
0 голосов
/ 26 апреля 2019

Действительно, SET TEST_VARIABLE = значение работает только для текущего процесса, поэтому SETX требуется. Быстрый пример постоянного хранения переменной среды на уровне пользователя.

  1. В cmd, SETX TEST_VARIABLE etc. Пока не применяется (echo %TEST_VARIABLE% показывает %TEST_VARIABLE%,
  2. Быстрая проверка: открыть cmd, echo %TEST_VARIABLE% показывает etc.
  3. Проверка GUI: Системные свойства -> Дополнительно -> Переменные среды -> Пользовательские переменные для -> вы должны увидеть переменную TEST_VARIABLE со значением etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...