Impedire che% PATH% del sistema Windows venga anteposto all'utente% PATH?


19

So come impostare variabili di ambiente specifiche del sistema o dell'utente:

Variabili di ambiente Windows

Ora, il problema è che la PATHvariabile viene trattata in modo tale che il valore immesso per l'utente PATH verrà automaticamente aggiunto al sistema PATH e che sarà la variabile PATH effettiva.

Cioè, dire che ho

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

e (UTENTE) PATH=C:\Program Files\Bar\bin(si noti che non è presente %PATH%questo valore)

quindi la variabile d'ambiente risultante per questo utente sarà:

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

Tuttavia, preferirei che per un account utente del SO molto specifico la variabile di ambiente PATH dovesse avere la bar\bindirectory all'inizio del PATH anziché alla fine.

Esiste un modo corretto per dire a Windows di sostituire completamente la PATHvariabile di un utente con il valore per quell'utente invece di aggiungerlo alla PATHvariabile di sistema ?

Nota: ovviamente, da un file batch, tutto questo non ha importanza in quanto puoi impostare e modificare env.vars come preferisci.


Perché non semplicemente ignorare la sezione USER. Elimina la variabile Path USER e metti tutto nella variabile Path SYSTEM, nell'ordine che desideri.
Kevin Fegan,

1
@KevinFegan: Beh, perché alcuni servizi sulla macchina dipendono da quel SISTEMA PATHe questo account utente specifico sarebbe meglio servirli con un altro PATH. So che ci sono molte soluzioni alternative, ma ero interessato al fatto che ci sia qualcosa di pronto / a livello di sistema operativo / registro per raggiungere questo obiettivo.
Martin,

Risposte:


3

Se è necessario che funzioni solo per le sessioni del prompt dei comandi, creare un file batch profilo / init e configurarlo nel registro, per /programming/17404165/how-to-run-a-command-on -command-prompt-startup-in-windows . Per esempio,

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

Quindi apportare semplicemente modifiche al PERCORSO in quel file batch. Per esempio,

SET USER_PATH=c:\whatever
SET PATH=%USER_PATH%;%PATH%

0

Ho avuto lo stesso problema e questo ha funzionato per me:

È possibile ottenere "variabile percorso utente" tramite:

>reg query HKCU\Environment /v path

L'output (sulla mia macchina) è:

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

Ma poi devi analizzare questo e usare la parte pertinente.

Ho letto la soluzione qui qui e testato sulla mia macchina.


-1

Non so come ignorare la variabile di sistema, ma so che se usi le variabili di sessione (tramite SETcomando), hanno la precedenza su altre variabili. Quindi puoi usare le SET PATH=C:\Program Files\Bar\binistruzioni e il tuo percorso desiderato sarà la prima parte della variabile.

Ecco un riferimento valido, e riporto qui un semplice periodo da quella pagina:

Se le variabili con lo stesso nome sono memorizzate come variabili Utente e Ambiente macchina, la variabile utente avrà la precedenza. Se viene creata una variabile Session che avrà la precedenza su qualsiasi variabile Utente e / o Ambiente macchina con lo stesso nome.


Questo è un riferimento utile, ma la prima frase che hai citato è un'eccessiva generalizzazione. La PATHvariabile è un'eccezione (caso speciale): la variabile utente non ha la precedenza sulla variabile di sistema. Il fatto che una "variabile di sessione" abbia la precedenza su entrambe le variabili preimpostate dell'utente e del sistema è vero, ma come si imposta automaticamente una variabile di sessione per un utente?  G-Wiz ha risposto a questa domanda e, AFAICS, non hai aggiunto nulla a quella risposta.
Scott
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.