Verhindern, dass Windows-System% PATH% dem Benutzer% PATH vorangestellt wird?

18

Ich kann system- oder benutzerspezifische Umgebungsvariablen setzen:

Windows-Umgebungsvariablen

Das Problem besteht nun darin, dass die PATHVariable so behandelt wird, dass der von Ihnen für den Benutzer PATH eingegebene Wert automatisch an den System-PATH angehängt wird und dies die effektive PATH-Variable ist.

Das heißt, ich habe gesagt

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

und (USER) PATH=C:\Program Files\Bar\bin (beachten Sie, dass %PATH%dieser Wert nicht enthalten ist)

Dann lautet die resultierende Umgebungsvariable für diesen Benutzer:

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

Ich möchte jedoch lieber, dass für ein ganz bestimmtes Betriebssystem-Benutzerkonto die Umgebungsvariable PATH die hat bar\bin Verzeichnis am Anfang des PFADS und nicht am Ende hat.

Gibt es eine richtige Möglichkeit, Windows anzuweisen, die PATHVariable eines Benutzers vollständig mit dem Wert für diesen Benutzer zu überschreiben , anstatt ihn an das System anzuhängen?PATH anzuhängen?

Hinweis: Aus einer Batch-Datei ist dies natürlich nicht wichtig, da Sie die env.vars so einstellen und anpassen können, wie Sie möchten.

Martin
quelle
Warum ignorieren Sie nicht einfach den Abschnitt USER? Löschen Sie die Variable USER Path und fügen Sie alles in der gewünschten Reihenfolge in die Variable SYSTEM Path ein.
Kevin Fegan
1
@ KevinFegan: Nun, da einige Dienste auf dem Computer von diesem SYSTEM abhängen PATHund dieses spezielle Benutzerkonto besser durch ein anderes Benutzerkonto bedient werden kann PATH. Ich weiß, dass es viele Problemumgehungen gibt, aber ich war daran interessiert, ob dies auf Betriebssystem- / Registrierungsebene möglich ist.
Martin

Antworten:

3

Wenn dies nur für Eingabeaufforderungssitzungen erforderlich ist, erstellen Sie eine Profil- / Init-Batchdatei und konfigurieren Sie sie in der Registrierung unter /programming/17404165/how-to-run-a-command-on -Befehls-Eingabeaufforderung-Start-in-Windows . Z.B,

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

Nehmen Sie dann einfach Änderungen am PATH in dieser Batch-Datei vor. Z.B,

SET USER_PATH=c:\whatever
SET PATH=%USER_PATH%;%PATH%
G-Wiz
quelle
0

Ich hatte das gleiche Problem und das hat bei mir funktioniert:

Sie können "Benutzerpfadvariable" erhalten durch:

>reg query HKCU\Environment /v path

Die Ausgabe (auf meinem Computer) ist:

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

Aber dann müssen Sie dies analysieren und den entsprechenden Teil verwenden.

Ich lese hier die Lösung hier und auf meinem Rechner getestet.

user2442366
quelle
-1

Ich weiß nicht, wie man Systemvariablen ignoriert, aber ich weiß, dass Sitzungsvariablen (über einen SETBefehl) Vorrang vor anderen Variablen haben. Sie können also die SET PATH=C:\Program Files\Bar\binAnweisung verwenden und Ihr gewünschter Pfad wird der erste Teil der Variablen sein.

Hier ist eine gültige Referenz, und ich berichte hier einen einfachen Zeitraum von dieser Seite:

Wenn Variablen mit demselben Namen sowohl als Benutzer- als auch als Maschinenumgebungsvariablen gespeichert werden, hat die Benutzervariable Vorrang. Wenn eine Sitzungsvariable erstellt wird, die Vorrang vor allen Benutzer- und / oder Computerumgebungsvariablen mit demselben Namen hat.

Gabriele Bertolucci
quelle
Das ist eine nützliche Referenz, aber der erste Satz, den Sie zitiert haben, ist eine Übergeneralisierung. Die PATHVariable ist eine Ausnahme (Sonderfall) - die Benutzervariable hat keinen Vorrang vor der Systemvariablen. Die Tatsache , dass ein „Session - Variable“ Vorrang vor den beiden Benutzern und System voreingestellten Variablen nehmen ist wahr, aber wie wollen Sie setzen ein Session - Variable automatisch für einen Benutzer?  G-Wiz hat diese Frage beantwortet , und, AFAICS, Sie haben dieser Antwort nichts hinzugefügt.
Scott