Предотвратить Windows System% PATH% перед добавлением к пользователю% PATH?

19

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

Переменные среды Windows

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

То есть, скажем, у меня есть

(СИСТЕМА) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...

и (ПОЛЬЗОВАТЕЛЬ) PATH=C:\Program Files\Bar\bin(обратите внимание, что нет %PATH%в этом значении)

тогда результирующая переменная окружения для этого пользователя будет:

(Эффективная) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...;C:\Program Files\Bar\bin

Однако я бы хотел, чтобы для очень специфической учетной записи пользователя ОС переменная среды PATH имела bar\binкаталог в начале PATH, а не в конце.

Есть ли правильный способ сказать Windows, чтобы полностью переопределить PATHпеременную пользователя со значением для этого пользователя вместо добавления его к системной PATHпеременной?

Примечание. Очевидно, что из пакетного файла все это не имеет значения, поскольку вы можете устанавливать и настраивать env.vars по своему усмотрению.

Мартин
источник
Почему бы просто не игнорировать раздел USER. Удалите переменную USER Path и поместите все в переменную SYSTEM Path в том порядке, в каком вы хотите.
Кевин Феган
1
@KevinFegan: Ну, потому что некоторые сервисы на машине зависят от этой СИСТЕМЫ, PATHи эта конкретная учетная запись пользователя будет лучше обслуживаться при наличии другой PATH. Я знаю, что есть много обходных путей, но мне было интересно, есть ли что-нибудь из коробки / на уровне ОС / реестра для достижения этой цели.
Мартин

Ответы:

3

Если это необходимо только для работы с сеансами командной строки, создайте пакетный файл профиля / init и настройте его в реестре по адресу /programming/17404165/how-to-run-a-command-on. -command-prompt-startup-in-windows . Например,

reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun ^
  /t REG_EXPAND_SZ /d "%"USERPROFILE"%\init.cmd" /f

Затем просто внесите изменения в PATH в этом пакетном файле. Например,

SET USER_PATH=c:\whatever
SET PATH=%USER_PATH%;%PATH%
G-Wiz
источник
0

У меня была такая же проблема, и это сработало для меня:

Вы можете получить «переменную пути пользователя» через:

>reg query HKCU\Environment /v path

Вывод (на моей машине):

HKEY_CURRENT_USER\Environment
    path    REG_SZ    C:\Program Files (x86)\GnuWin32\bin

Но тогда вы должны разобрать это и использовать соответствующую часть.

Я прочитал решение здесь здесь и протестирован на моей машине.

user2442366
источник
-1

Я не знаю, как игнорировать системные переменные, но я знаю, что если вы используете переменные сеанса (через SETкоманду), они имеют приоритет над другими переменными. Таким образом, вы можете использовать SET PATH=C:\Program Files\Bar\binинструкцию, и ваш желаемый путь будет первой частью переменной.

Вот действительная ссылка, и я сообщаю здесь простой период с этой страницы:

Если переменные с одинаковыми именами сохраняются как переменные среды пользователя и среды компьютера, переменная пользователя будет иметь приоритет. Если создается переменная Session, которая будет иметь приоритет над любой переменной User и / или Machine Environment с тем же именем.

Габриэле Бертолуччи
источник
Это полезная ссылка, но первое предложение, которое вы процитировали, - это чрезмерное обобщение. PATHПеременная является исключением (особый случай) - пользовательская переменная имеет не имеют приоритет над системной переменной. Тот факт, что «переменная сеанса» будет иметь приоритет над предварительно установленными переменными пользователя и системы, является верным, но как автоматически установить переменную сеанса для пользователя?  G-Wiz ответил на этот вопрос , и, AFAICS, вы ничего не добавили к этому ответу.
Скотт