Я использовал следующие команды для установки / удаления переменных среды пользователя / системы:

СИСТЕМА:

setx -m PATH "%PATH%C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;"

USER:

setx VAR1 "CONTENT OF VAR1"

Позже я нашел эти ограничения:

  1. Если %PATH% слишком длинный, я получаю следующее предупреждение и %PATH% усекается:

ВНИМАНИЕ: Сохраняемые данные усекаются до 1024 символов.

  1. Как подсказывает команда setx :

Когда вы используете Setx.exe для очистки значения переменной среды, имя переменной среды не изменяется

Другими словами, когда я запускаю setx -m OCVLIBDIR "" тогда OCVLIBDIR не будет удален, а скорее будет пустым.

Как я могу преодолеть эти ограничения?

PS: Я предпочитаю инструменты, которые являются частью Windows 10 (например, PowerShell), но это не проблема, чтобы использовать также инструменты сторонних производителей (хотя мне это кажется излишним).

PPS: я знаю, что можно редактировать переменные с помощью графического интерфейса Windows, регистров или некоторых сторонних инструментов с графическим интерфейсом, но я предпочитаю сценарии, потому что я мог написать несколько сценариев и быстро переключаться между ними.Это полезно, когда я экспериментирую с различными библиотеками в моей системе (например, с различными версиями opencv и т.д.).

1 ответ1

3

PowerShell

Эта статья TechNet описывает основы.

В этом ответе описывается получение переменных системы и пользовательской среды (о чем было сказано только в первой статье). "Machine" для системы, "User" для текущего пользователя и "Process" для текущего процесса, который работает для получения окончательного сочетания «система / пользователь».

О конкатенации PowerShell говорится в этом вопросе и его ответах. Вы можете собирать строки, используя + для объединения или использования подстановки, как в "{0} {1}" -f "Hello","World" .

Круглые скобки используются для группировки конструкций.

Переменные не являются типизированными, необъявленными и начинаются с $ .

Собрав все это, вы получите что-то вроде:

$path = [Environment]::GetEnvironmentVariable("PATH","User")
[Environment]::SetEnvironmentVariable("PATH",$path+";C:\Temp","User")

Или как однострочник:

[Environment]::SetEnvironmentVariable("PATH",([Environment]::GetEnvironmentVariable("PATH","User"))+";C:\Temp","User")

В этой статье описывается, как удалить переменные среды ($null - это специальная переменная):

[Environment]::SetEnvironmentVariable("MyTestVariable",$null,"User")

Изменения переменных среды, сделанные таким образом, доступны во всем мире.


CMD

reg.exe может добавлять, изменять и удалять записи реестра. Переменные среды живут в реестре. Этот ответ говорит об использовании reg для удаления переменных среды.

Для переменных среды пользователя:

reg DELETE HKCU\Environment /v envvarname

Для системных переменных среды:

reg DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v envvarname

(HKCU взаимозаменяем с HKEY_CURRENT_USER . HKLM взаимозаменяем с HKEY_LOCAL_MACHINE .)

(Обратите внимание, что CMD обрабатывает пустые переменные среды так же, как и несуществующие переменные среды. Однако я понимаю, что вы пытаетесь удалить переменную из системы.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .