Zapobiegać dodawaniu% PATH% systemu Windows do użytkownika% PATH?

19

Wiem, jak ustawić zmienne środowiskowe specyficzne dla systemu lub użytkownika:

Zmienne środowiska Windows

Problem polega na tym, że PATHzmienna jest traktowana tak, że wartość wprowadzona dla użytkownika PATH zostanie automatycznie dołączona do systemowej PATH i będzie to efektywna zmienna PATH.

To znaczy, powiedz, że mam

(SYSTEM) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...

i (USER) PATH=C:\Program Files\Bar\bin(pamiętaj, że nie ma %PATH%tej wartości)

wynikowa zmienna środowiskowa dla tego użytkownika będzie:

(efektywny) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...;C:\Program Files\Bar\bin

Jednak wolałbym, aby dla bardzo konkretnego konta użytkownika systemu operacyjnego zmienna środowiskowa PATH powinna mieć bar\binkatalog na początku PATH zamiast na końcu.

Czy istnieje właściwy sposób, aby nakazać PATHsystemowi Windows całkowite zastąpienie zmiennej użytkownika wartością dla tego użytkownika zamiast dołączania jej do PATHzmiennej systemowej ?

Uwaga: Oczywiście z pliku wsadowego wszystko to nie ma znaczenia, ponieważ możesz ustawiać i modyfikować zmienne środowiskowe w dowolny sposób.

Jaskółka oknówka
źródło
Dlaczego nie zignorować sekcji USER. Usuń zmienną USER Path i umieść wszystko w zmiennej SYSTEM Path, w żądanej kolejności.
Kevin Fegan,
1
@KevinFegan: Cóż, ponieważ niektóre usługi na komputerze zależą od tego SYSTEMU, PATHa to konkretne konto użytkownika lepiej byłoby obsłużyć, mając inne PATH. Wiem, że istnieje wiele obejść, ale byłem zainteresowany, czy jest coś gotowego do działania na poziomie systemu operacyjnego / rejestru.
Martin

Odpowiedzi:

3

Jeśli potrzebujesz tego tylko do sesji wiersza polecenia, utwórz plik wsadowy profil / init i skonfiguruj go w rejestrze, zgodnie z /programming/17404165/how-to-run-a-command-on -command-prompt-startup-in-windows . Na przykład,

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

Następnie po prostu wprowadź zmiany do PATH w tym pliku wsadowym. Na przykład,

SET USER_PATH=c:\whatever
SET PATH=%USER_PATH%;%PATH%
G-Wiz
źródło
0

Miałem ten sam problem i to zadziałało dla mnie:

Możesz uzyskać „zmienną ścieżki użytkownika” poprzez:

>reg query HKCU\Environment /v path

Dane wyjściowe (na moim komputerze) to:

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

Ale musisz to przeanalizować i użyć odpowiedniej części.

Czytam tu rozwiązanie tutaj i przetestowane na moim komputerze.

użytkownik2442366
źródło
-1

Nie wiem, jak zignorować zmienną systemową, ale wiem, że jeśli używasz zmiennych sesji (za pomocą SETkomendy), mają one pierwszeństwo przed innymi zmiennymi. Możesz więc użyć SET PATH=C:\Program Files\Bar\bininstrukcji, a pożądana ścieżka będzie pierwszą częścią zmiennej.

Oto prawidłowe odniesienie, a tutaj zgłaszam prosty okres z tej strony:

Jeśli zmienne o tej samej nazwie są przechowywane jako zmienne środowiskowe użytkownika i maszyny, zmienna użytkownika będzie miała pierwszeństwo. Jeśli tworzona jest zmienna sesji, która będzie miała pierwszeństwo przed dowolną zmienną środowiska użytkownika i / lub maszyny o tej samej nazwie.

Gabriele Bertolucci
źródło
To przydatne odniesienie, ale pierwsze przytoczone zdanie to nadmierna generalizacja. PATHZmienna jest wyjątek (szczególny przypadek) - zmienna użytkownik ma nie mieć pierwszeństwo nad zmiennej systemowej. Fakt, że „zmienna sesji” będzie miała pierwszeństwo przed zmiennymi ustawionymi przez użytkownika i system, jest prawdą, ale jak ustawić zmienną sesji automatycznie dla użytkownika?  G-Wiz odpowiedział na to pytanie , a AFAICS, nie dodałeś nic do tej odpowiedzi.
Scott