Windows удалить переменную окружения

Обновлено: 07.07.2024

    Команда SETX используется для создания новых и изменения существующих переменных среды окружения в командной строке Windows. Переменные окружения, это переменные, принимаемые значения которых характеризуют программную среду, в которой выполняется текущая программа - пути системных файлов, сведения об аппаратных средствах, каталоги пользователей и т.п. Значения переменных среды формируются в процессе загрузки Windows, регистрации пользователя в системе, при выполнении отдельных программ или с помощью команды SET . Команда SetX, является более мощным средством администрирования Windows, позволяющим изменять системные или пользовательские переменные не только на локальном компьютере, но и на удаленном. Переменные можно задавать с помощью аргументов, параметров реестра или ввода из файла. В отличие от команды SET, изменения переменных окружения, сделанные командой SetX, записываются в реестр и действуют не только в данном сеансе командной строки, но и в любом другом.
Первоначально, утилита SetX.exe входила в состав Windows 2000 Resource Kit в качестве дополнительного средства системного администрирования, но начиная с Windows Vista - входит в стандартный пакет поставки системы.

Используются три варианта синтаксиса команды SetX :

SETX [/S система [/U [домен\]пользователь [/P [пароль]]]] var значение [/M]

SETX [/S система [/U [домен\]пользователь [/P [пароль]]]] var /K путь [/M]

SETX [/S система [/U [домен\]пользователь [/P [пароль]]]] /F файл [/M] | /X> [/D разделители]


Параметры командной строки:

/S система - Имя или IP-адрес удаленного компьютера. Если не указан, то команда выполняется по отношению к локальному компьютеру.

/U домен\]пользователь - Пользовательский контекст, в котором должна выполняться эта команда.

/P пароль - Пароль для этого пользовательского контекста.

var - Задаваемая переменная среды.

значение - Значение, назначаемое переменной среды.

/K путь - Задание переменной по информации, cодержащейся в параметре реестра. Путь должен задаваться в формате куст\раздел\. \параметр . Например, HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Control\timeZoneInformation\StandardName.

/F файл - Имя текстового файла, который следует использовать.

/A x,y - Задание абсолютных координат файла (строка X, элемент Y) как параметров поиска в файле.

/R x,y строка - Задание координат относительно значения "строка" как параметров поиска.

/M - Указание создания переменной среды на системном уровне (HKEY_LOCAL_MACHINE). По умолчанию переменная среды создается в разделе HKEY_CURRENT_USER на уровне пользователя.

/X - Отображение содержимого файла с координатами x,y.

/D разделители - Указание дополнительных разделителей, таких как "," или "\". Встроенные разделители: символы пробела, табуляции, возврата каретки и перевода строки. Дополнительным разделителем может быть любой знак ASCII. Максимальное число разделителей, включая встроенные, равняется 15. Вывод справки по использованию.

1) SETX записывает переменные в главную среду в реестре.

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

3) На удаленном компьютере переменные, созданные или измененные данным средством, будут доступны со следующего сеанса входа.

4) Допустимые типы параметров реестра: REG_DWORD, REG_EXPAND_SZ, REG_SZ, REG_MULTI_SZ.

5) Поддерживаемые кусты: HKEY_LOCAL_MACHINE (HKLM), HKEY_CURRENT_USER (HKCU).

6) Разделители определяются с учетом регистра.

7) Значения типа REG_DWORD извлекаются из реестра в десятичном формате.


Значения переменных окружения ( Environment variables ) записываются в реестр:

Пользовательские переменные - в раздел : HKEY_CURRENT_USER\Environment

Системные переменные - в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Если значения каких либо переменных изменены в данной сессии командной строки Windows, то изменения вступят в силу только в новом сеансе, после перезапуска CMD ( или PowerShell ). Для изменения системных переменных ( ключ /M ) требуются права администратора ( "Запуск от имени администратора " в Windows 7).
Пользовательские переменные запоминаются в профиле и действительны, для перемещаемого профиля, на любом компьютере домена.
Если одно и то же имя переменной имеется в среде пользователя и в среде системы, то значение пользовательской переменной имеет более высокий приоритет.

Для редактирования переменных можно использовать панель управления - Панель управления - Система - Дополнительно - Переменные среды ( Control Panel - System - Advanced - Environment Variables )

Для удаления переменных среды можно воспользоваться Панелью управления, удалением ключей с переменными среды редактором реестра или консольной утилитой REG

REG delete HKCU\Environment /V MyVar - удалить пользовательскую переменную MyVar

Присвоение переменной пустого значения командой Setx не приводит к удалению ее имени из реестра, что может стать причиной проблем с выполнением некоторых программ. Если например, имеется пользовательская переменная с пустым значением, то по команде SET она не отображается, и при наличии системной переменной с таким же именем, ее значение станет недоступным из-за более высокого приоритета пользовательской переменной. Поэтому, во избежание конфликтов желательно не оставлять в реестре мусор из переменных с неприсвоенными значениями.

Примеры использования Setx:

SETX MACHINE COMPAQ - создать на локальном компьютере переменную среды пользователя с именем MACHINE, принимающую значение COMPAQ. Для просмотра значений переменных можно воспользоваться командой echo :

echo %MACHINE% - отобразить значение переменной MACHINE

Можно также использовать команду SET в цепочке с командой поиска текста FIND:

set | Find /i "machine"

setx.exe MACHINE "Asustek Computer" /M - создать на локальном компьютере системную переменную MACHINE, принимающую значение Asustek Computer . Если значение переменной содержит пробелы, то оно заключается в двойные кавычки.

Setx MYPATH "" - сбросить значение переменной окружения MYPATH ( сделать пустым )

SETX MYPATH "%PATH%" - создать на локальном компьютере пользрвательскую переменную окружения с именем MYPATH , принимающую текущее значение переменной PATH – пути поиска исполняемых файлов, сформированные на момент выполнения команды, например, Path=С:\Program Files\Far;С:\Program Files\NVIDIA Corporation\PhysX\Common;С:\WINDOWS\system32;С:\WINDOWS;С:\WINDOWS\System32\Wbem; . SETX MYPATH

- в качестве значения переменной будет записана строка, в которой символы

будут заменены на символы % , т.е в качестве значения переменной MYPATH будет записана строка %PATH%

SETX /S Server /U Mydomain\Admin /P AdmPass MYPATH "%PATH%" - установить на удаленном компьютере Server значение переменной окружения MYPATH равное текущему значению переменной PATH локального компьютера. Для подключения к удаленному компьютеру используется имя пользователя Admin в домене Mydomain и пароль AdmPass

SETX TZONE /K HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\timeZoneInformation\StandardName - установить значение среды TZONE равным содержимому ключа реестра

При выполнении команды SetX отображается извлеченное значение ключа реестра и результат записи нового значения переменной:

Извлечено значение: "@tzres.dll,-912".

Успех. Указанное значение сохранено.

setx /s 192.168.0.1 /U admin /P Admpass BUILD /K "HKLM\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber" - создать на удаленном компьютере с IP-адресом 192.168.0.1 переменную BUILD , принимающую значение ключа реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber

SETX /F ipconfig.out /X - разбор содержимого текстового файла ipconfig.out с выводом координат каждого поля в виде x,y – (номер строки, номер колонки) . Нумерация строк и колонок начинается с 0 .

Для того, чтобы получить наглядное представление об обработке содержимого текстового файла, попробуйте создать текстовый файл следующего содержания:

a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
d1 d2 d3 d4 d5

Результат обработки этого содержимого командой SetX :

(0,0 a1)(0,1 a2)(0,2 a3)(0,3 a4)(0,4 a5)
(1,0 b1)(1,1 b2)(1,2 b3)(1,3 b4)(1,4 b5)
(2,0 c1)(2,1 c2)(2,2 c3)(2,3 c4)(2,4 c5)
(3,0 d1)(3,1 d2)(3,2 d3)(3,3 d4)(3,4 d5)

Таким образом, элемент (0,0 a1) - это координаты 0,0 , которым соответствует значение a1

Таким образом, вы можете установить переменную следующим образом:

И вы можете очистить значение следующим образом:

Однако переменная не удаляется. Он остается в реестре:

foobar

Итак, как бы вы на самом деле удалили переменную?

Чтобы удалить переменную из текущей среды (не навсегда):

Чтобы навсегда удалить переменную из среды пользователя (это место по умолчанию setx помещает ее):

Если переменная установлена в системной среде (например, если вы изначально установили ее с помощью setx /M ), администратор запустит:

Примечание. Команды REG , описанные выше, не влияют на существующие процессы (и некоторые новые процессы, которые разветвляются из существующих процессов), поэтому, если важно, чтобы изменение вступило в силу немедленно, вы может выйти из системы и снова войти или перезагрузиться.

Чтобы подтвердить, запустите set без аргументов и проверьте текущую среду. Переменная должна отсутствовать в списке целиком.

Это было рассмотрено довольно много, но есть важная часть информации, которая отсутствует. Надеюсь, я смогу помочь разобраться, как это работает, и немного облегчить усталых путешественников. 🙂

Удалить из текущего процесса

Очевидно, что все знают, что вы просто делаете это, чтобы удалить переменную окружения из вашего текущего процесса:

Постоянное удаление

Существует два набора переменных среды: общесистемные и пользовательские.

Удалить переменную среды пользователя:

Удалить общесистемную переменную среды:

Применить значение без перезагрузки

Здесь волшебная информация, которая отсутствует! Вы задаетесь вопросом, почему после того, как вы сделаете это, когда вы запускаете новое командное окно, переменная окружения все еще там. Причина в том, что explorer.exe не обновил свою среду. Когда один процесс запускает другой, новый процесс наследует среду от процесса, который его запустил.

Резюме

Обратите внимание, что вам, вероятно, придется обновить настройки PowerShell, чтобы позволить вам запускать этот сценарий, но я оставлю это как упражнение Google-fu для вас.

SET бесполезен для изменений в основной среде.

К вашему сведению: системные переменные находятся в HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment (намного дольше, чем пользовательские переменные).

Поэтому полная команда для системной переменной с именем FOOBAR выглядит так:

(обратите внимание на кавычки, необходимые для обработки пробела.)

Очень плохо, что команда setx не поддерживает синтаксис удаления. 🙁

Команда в ответе DougWare не сработала, но это сработало:

Ярлык HKLM можно использовать для HKEY_LOCAL_MACHINE .

Чтобы удалить переменную среды пользователя с именем FOO :

Note that [TG43] is used to better signal the intent to remove the variable, though technically it is effectively the same as passing [TG44] in this case.

а затем FOOBAR больше не был указан в команде set. (Выход не требуется.)

Windows 7 32-разрядная, используя командную строку, не администратор это то, что я использовал. (Не cmd или Windows + R , которые могут отличаться.)

Кстати, я не видел переменную, которую я создал где-то в реестре после того, как я ее создал. Я использую RegEdit не как администратор.

Вы также можете создать небольшой VBScript скрипт:

Тогда назовите это как %windir%\System32\cscript.exe //Nologo "script_name.vbs" FOOBAR .

Недостаток в том, что вам нужен дополнительный скрипт, но он не требует перезагрузки.

Отображает, устанавливает или удаляет переменные среды cmd.exe. Если используется без параметров, Set отображает текущие параметры переменной среды.

Для этой команды требуются расширения команд, которые включены по умолчанию.

команда set также может запускаться из консоли восстановления Windows с использованием различных параметров. дополнительные сведения см. в разделе Windows среды восстановления (WinRE).

Синтаксис

Параметры

Комментарии

Если расширения команд включены (по умолчанию) и вы запускаете Set со значением, отображаются все переменные, которые начинаются с этого значения.

Символы < ,, > , | & и ^ являются специальными символами командной оболочки и перед ними должны начинаться escape-символом ( ^ ) или заключены в кавычки <string> (например, "стрингконтаининг & symbol"). Если строка, содержащая специальный символ, заключена в кавычки, кавычки необходимо указывать как часть значения переменной среды.

используйте переменные среды для управления поведением некоторых пакетных файлов и программ, а также для управления способом отображения Windows и работы подсистемы MS-DOS. Команда Set часто используется в файле Autoexec. NT для задания переменных среды.

Если вы используете команду Set без параметров, отображаются текущие параметры среды. Эти параметры обычно включают переменные среды ComSpec и path , которые используются для поиска программ на диске. в Windows используются две другие переменные среды: PROMPT и DIRCMD.

Если заданы значения для <variable> и <string> , указанное <variable> значение добавляется в среду и <string> связывается с этой переменной. Если переменная уже существует в среде, новое строковое значение заменяет старое.

Если указать только переменную и знак равенства (без <string> ) для команды <string> , <string> значение, связанное с переменной, будет очищаться (как если бы переменная отсутствует).

При использовании параметра /a поддерживаются следующие операторы в порядке убывания приоритета.

Если используются операторы логического ( && или || ) или модуля ( % ), заключите строку выражения в кавычки. Все нечисловые строки в выражении считаются именами переменных среды, и их значения преобразуются в числа до их обработки. Если указать имя переменной среды, которое не определено в текущей среде, то выделяется нулевое значение, что позволяет выполнять арифметические операции со значениями переменных среды без использования% для получения значения.

При запуске set/a из командной строки за пределами командного скрипта отображается конечное значение выражения.

Числовые значения — это десятичные числа, кроме префикса 0 × для шестнадцатеричных чисел или 0. Таким образом, 0 × 12 совпадает с 18, что совпадает с 022.

Отложенная поддержка расширения переменных среды по умолчанию отключена, но ее можно включить или отключить с помощью команды cmd/v.

При создании пакетных файлов можно использовать команду Set для создания переменных, а затем использовать их так же, как и пронумерованные переменные %0 – %9. Можно также использовать переменные %0 – %9 в качестве входных данных для Set.

При вызове значения переменной из пакетного файла заключите значение в знаки процента ( % ). Например, если программа пакетной службы создает переменную среды с именем бод, можно использовать строку, связанную с параметром бод , в качестве заменяемого параметра, введя % бод% в командной строке.

Примеры

Чтобы задать значение Test ^ 1 для переменной среды с именем , введите:

Команда Set назначает значение переменной всем, что следует за знаком равенства (=). Поэтому при вводе set testVar=test^1 вы получите следующий результат: testVar=test^1 .

Чтобы задать значение Test 1 для переменной среды testVar , введите:

Чтобы задать переменную среды с именем include , с которой связана строка к:\директори , введите:

Затем можно использовать строку к:\директори в пакетных файлах, заключив имя в символы процента ( ). Например, можно использовать dir %include% в пакетном файле для вывода содержимого каталога, связанного с переменной среды include. После обработки этой команды строка к:\директори заменяет % include%.

Чтобы использовать команду Set в пакетной программе для добавления нового каталога в переменную среды path , введите:

Чтобы отобразить список всех переменных среды, начинающихся с буквы P, введите:

Таким образом, вы можете установить переменную следующим образом:

И вы можете очистить значение следующим образом:

Однако переменная не удаляется. Он остается в реестре:

foobar

Итак, как бы вы на самом деле удалили переменную?

Чтобы удалить переменную из текущей среды (не навсегда):

Чтобы навсегда удалить переменную из среды пользователя (это место по умолчанию setx помещает ее):

Если переменная установлена в системной среде (например, если вы изначально установили ее с помощью setx /M ), администратор запустит:

Примечание. Команды REG , описанные выше, не влияют на существующие процессы (и некоторые новые процессы, которые разветвляются из существующих процессов), поэтому, если важно, чтобы изменение вступило в силу немедленно, вы может выйти из системы и снова войти или перезагрузиться.

Чтобы удалить переменную из текущего сеанса команды, не удаляя ее постоянно, используйте регулярную встроенную команду set - просто не помещайте ничего после знака равенства:

Чтобы подтвердить, запустите set без аргументов и проверьте текущую среду. Переменная должна отсутствовать в списке целиком.

Примечание: это приведет только к удалению переменной из текущей среды - она ​​не будет сохраняться в реестре. Когда будет запущен новый командный процесс, переменная вернется.

Это было рассмотрено довольно много, но есть важная часть информации, которая отсутствует. Надеюсь, я смогу помочь разобраться, как это работает, и немного облегчить усталых путешественников. :-)

Удалить из текущего процесса

Очевидно, что все знают, что вы просто делаете это, чтобы удалить переменную окружения из вашего текущего процесса:

Постоянное удаление

Существует два набора переменных среды: общесистемные и пользовательские.

Удалить переменную среды пользователя:

Удалить общесистемную переменную среды:

Применить значение без перезагрузки

Здесь волшебная информация, которая отсутствует! Вы задаетесь вопросом, почему после того, как вы сделаете это, когда вы запускаете новое командное окно, переменная окружения все еще там. Причина в том, что explorer.exe не обновил свою среду. Когда один процесс запускает другой, новый процесс наследует среду от процесса, который его запустил.

Резюме

Поэтому, чтобы удалить переменную среды пользователя с именем "FOO" и отразить это изменение в процессах, которые вы запускаете впоследствии, выполните следующие действия.

  1. Сохраните сценарий PowerShell в файл (назовем его updateenv.ps1).
  2. Сделайте это из командной строки: reg delete "HKCU\Environment"/v FOO/f
  3. Запустите updateenv.ps1.
  4. Закройте и снова откройте командную строку, и вы увидите, что переменная среды больше не определяется.

Обратите внимание, что вам, вероятно, придется обновить настройки PowerShell, чтобы позволить вам запускать этот сценарий, но я оставлю это как упражнение Google-fu для вас.


Программистам, системным администраторам и опытным пользователям может потребоваться в какой-то момент поработать с переменными среды. Некоторые могут захотеть удалить переменную среды; другие захотят изменить его значение и так далее. В этом руководстве рассказывается, как редактировать или удалять переменные среды, а также как отключить переменные среды в Windows:

Откройте окно переменных среды

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


Как редактировать переменную среды в Windows

Если вы хотите изменить значение существующей переменной среды, сначала выберите ее в окне «Переменные среды». Затем щелкните или коснитесь «Изменить».


Вам будет показано окно, в котором вы можете редактировать как имя, так и значение переменной. Внесите желаемые изменения и нажмите ОК . Затем еще раз нажмите OK в окне переменных среды .


Как редактировать переменную среды из командной строки

Вы также можете создать новую переменную среды или изменить значение существующей переменной среды (но не ее имя) из командной строки . Вам нужно ввести следующую команду:

  • setx variable_name "value" , если вы хотите создать переменную среды пользователя
  • setx variable_name "value" /m , если вы собираетесь создать системную переменную среды

Например, мы набрали setx TEST "C:\digitalcitizen" и создали пользовательскую переменную TEST со значением C:\digitalcitizen.


Если мы хотим изменить значение переменной среды, мы можем запустить ту же команду setx, но указать новое значение для переменной. Например, выполнение setx TEST "C:\DC" изменяет значение переменной среды TEST на C:\DC.


Это работает, потому что команда setx перезаписывает существующее значение последним введенным вами. Следовательно, если вы используете эту команду несколько раз для одной и той же переменной, переменная сохранит последнее введенное вами значение.

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


ПРИМЕЧАНИЕ. Вы можете получить список всех доступных переменных среды, выполнив команду set в командной строке (не setx и без каких-либо параметров). Однако, если вы только что создали или отредактировали переменную среды, необходимо закрыть и снова открыть командную строку, чтобы изменения отобразились.


Как редактировать переменную среды из PowerShell

Вы также можете создать или изменить значение существующей переменной среды из PowerShell . Команда PowerShell для этого:

  • [Environment]::SetEnvironmentVariable("variable_name","variable_value","User") , если вы хотите создать переменную среды пользователя.
  • [Environment]::SetEnvironmentVariable(“variable_name”,”variable_value”,”Machine”) , если вы хотите создать системную переменную среды.

Например, мы набрали [Environment]::SetEnvironmentVariable(“TEST”,”digitalcitizen.life”,”User”) , чтобы создать переменную пользовательской среды под названием TEST со значением digitalcitizen.life. Чтобы изменить значение переменной позже, мы можем запустить ту же команду с другим значением. Как и setx в командной строке, эта команда переписывает значение указанной переменной каждый раз, когда вы ее запускаете.


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


ПРИМЕЧАНИЕ. В PowerShell вы можете получить список всех переменных среды, выполнив команду Get-ChildItem Env: . Однако, если вы только что создали или отредактировали переменную среды, вам необходимо закрыть и снова открыть PowerShell, чтобы изменения отобразились.


Как очистить значение переменной среды в Windows (из командной строки)

Если вы хотите удалить значение переменной среды (сохранив ее имя), вы не можете сделать это с помощью мыши и клавиатуры из окна переменных среды . Если вы выберете переменную и нажмете «Изменить», вы можете удалить значение, но не можете нажать «ОК», так как эта кнопка становится серой. Поэтому вы не можете сохранить свои изменения.


Однако вы можете очистить значение переменной среды с помощью командной строки. Чтобы отменить установку переменной среды из командной строки , введите команду setx variable_name "" . Например, мы набрали setx TEST "" , и эта переменная среды теперь имела пустое значение.


Далее давайте посмотрим, как удалить переменную среды.

Как удалить переменную среды в Windows

Если вы больше не хотите использовать конкретную переменную среды, выберите ее в окне «Переменные среды». Затем нажмите Удалить. Windows не запрашивает подтверждения этого действия. Поэтому, если вы передумали, необходимо нажать Отмена, чтобы удаление не применялось. Если вы хотите, чтобы удаление продолжилось, нажмите ОК .


Как удалить переменную среды из командной строки

Чтобы удалить переменную среды из командной строки , введите одну из этих двух команд в зависимости от типа этой переменной:

  • REG delete "HKCU\Environment" /F /V "variable_name" , если это переменная среды пользователя, или
  • REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V "variable_name" , если это системная переменная среды.

Например, мы набрали REG delete "HKCU\Environment" /F /V "TEST" , и наша переменная среды TEST исчезла из профиля пользователя.


Как удалить переменную среды из PowerShell

Чтобы отменить установку и удалить переменную среды из PowerShell , введите команду:

  • [Environment]::SetEnvironmentVariable("variable_name", $null ,"User") , если это переменная профиля пользователя, или
  • [Environment]::SetEnvironmentVariable("variable_name", $null ,"Machine") , если это общесистемная переменная.

Например, мы набрали [Environment]::SetEnvironmentVariable("TEST", $null ,"User") , и эта переменная среды исчезла из профиля пользователя.


Читайте также: