Задать системную переменную среды из пакетного файла Windows?

Можно ли установить переменную среды на системном уровне из командной строки в Windows 7 (или даже XP в этом отношении). Я бегу из командной строки с повышенными правами.

Когда я использую set команда (set name=value), переменная окружения представляется действительной только для сеанса командной строки.

6 ответов

Решение

Средства поддержки XP (которые можно установить с компакт-диска XP) поставляются с программой под названием setx.exe:

C:\Program Files\Support Tools>setx /?

SETX: This program is used to set values in the environment
of the machine or currently logged on user using one of three modes.

1) Command Line Mode: setx variable value [-m]
   Optional Switches:
    -m  Set value in the Machine environment. Default is User.

...
For more information and example use: SETX -i

Я думаю, что Windows 7 на самом деле поставляется с setx как часть стандартной установки.

Простой пример того, как установить JAVA_HOME с setx.exe в командной строке:

setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_04"

Это установит переменную окружения "JAVA_HOME" для текущего пользователя. Если вы хотите установить переменную для всех пользователей, вы должны использовать опцию "-m". Вот пример:

setx -m JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_04"

Примечание: вы должны выполнить эту команду от имени администратора.

Примечание. Обязательно запустите команду setx из окна администратора командной строки.

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

Используйте следующую последовательность, чтобы напрямую установить ее и в процессе установки (у меня отлично работает в скриптах, которые выполняют некоторые инициализации после установки глобальных переменных):

SET XYZ=test
SETX XYZ test

SetX - это команда, которая вам понадобится в большинстве случаев, хотя можно использовать REG или REGEDIT.

Используя команды редактирования реестра, вы можете избежать некоторых ограничений команды SetX - разных типов данных, переменных, содержащих = от их имени и так далее.

@echo off

:: requires admin elevated permissions
::setting system variable
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MyVar /D MyVal
::expandable variable
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /T REG_EXPAND_SZ /v MyVar /D MyVal


:: does not require admin permissions
::setting user variable
REG ADD "HKEY_CURRENT_USER\Environment" /v =C: /D "C:\\test"

REG - это чистый клиент реестра, но его также можно импортировать с помощью REGEDIT, хотя он позволяет использовать только жестко закодированные значения (или создание временных файлов). Примером является гибридный файл, содержащий как пакетный код, так и данные реестра (следует сохранить как .bat - учтите, что партиями ; игнорируются как разделители, а используются как комментарии в .reg файлы):

REGEDIT4

; @ECHO OFF
; CLS
; REGEDIT.EXE /S "%~f0"
; EXIT

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"SystemVariable"="GlobalValue"

[HKEY_CURRENT_USER\Environment]
"UserVariable"="SomeValue"

Системные переменные могут быть установлены через CMD и реестр. Например. запрос reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH

Все обычно используемые коды CMD и системные переменные приведены здесь: Установите системные переменные среды Windows с помощью CMD.

Откройте CMD и введите Set

Вы получите все значения системной переменной.

Введите set java, чтобы узнать подробности пути java, установленного в вашей оконной ОС.

Для XP я использовал (бесплатное / бесплатное программное обеспечение) инструмент под названием "RAPIDEE" (Rapid Environment Editor), но SETX определенно достаточно для Win 7 (я не знал об этом раньше).

На случай, если вам потребуется удалить переменную, вы можете использовать SETENV от Vincent Fatica, доступной по адресу http://barnyard.syr.edu/~vefatica. Не совсем недавно ('98), но все еще работает на Windows 7 x64.

Другие вопросы по тегам