Wie füge ich benutzerdefinierte Umgebungsvariablen an die Systemvariable PATH in Windows 7 an?


9

Ich habe zwei benutzerdefinierte Variablen:

ANT_HOME auf% USERPROFILE% \ Developer \ Tools \ Apache \ Apache Ant \ apache-ant-1.8.2 JAVA_HOME auf C: \ Programme \ Java \ jdk1.6.0_23 gesetzt

Und ich möchte diese Pfade an die Systemvariable anhängen, damit ich auf die ausführbaren Dateien in ihren Bin-Ordnern zugreifen kann. Ich habe es versucht

PATH auf [andere Pfade] gesetzt;% ANT_HOME% \ bin;% JAVA_HOME% \ bin

Das funktioniert jedoch nicht. Wenn ich eine Eingabeaufforderung öffne und% PATH% wiedergebe, werden die Benutzervariablen nicht erweitert . Der Pfad zeigt also nur das Literal:% ANT_HOME% \ bin;% JAVA_HOME% \ bin

Ich erinnere mich, dass dies auf meinen alten Windows XP-Systemen gut funktioniert. Wie richte ich das unter Windows 7 ein?


Ich habe gerade einen Microsoft Support-Artikel aus dem Jahr 2007 gefunden, der einen Fehler in Shell32.dll beschreibt. Ich habe meiner Benutzervariablenliste eine PATH-Variable hinzugefügt, wobei PATH auf% PATH%;% ANT_HOME% \ bin;% JAVA_HOME% \ bin gesetzt ist, und das Problem umgangen. Ich mag es nicht, es nur für meinen Benutzer einzustellen, aber irgendwie zeigt mein System das Symptom dieses alten Fehlers und ich sehe noch keine bessere Antwort. Der Artikel ist bei: support.microsoft.com/kb/329308
Michael Prescott

Antworten:


5

UPDATE NO.2 - Nun zur eigentlichen Frage: Warum können verschachtelte, vom Benutzer erstellte Variablen nicht erweitert werden?

Es gibt einige allgemeine Probleme bei der Variablenerweiterung in Windows. Ich bin bereits auf dasselbe Problem gestoßen und habe keine klaren, reproduzierbaren Umstände gefunden - die Rekursionsstufe, bei der die Erweiterung fehlschlägt, ist nicht konsistent, Sonderzeichen scheinen keine Rolle zu spielen usw.

Die einzige praktikable Problemumgehung, die ich gefunden habe, ist das Hinzufügen von Variablen Rekursionsstufe für Rekursionsstufe. Das bedeutet: Löschen Sie alle Variablen, die Sie ineinander verschachteln möchten (einschließlich der Aufrufe von PATH an Ihre benutzerdefinierten Variablen), und starten Sie dann von vorne. Definieren Sie Ihre grundlegenden Variablen (usw. ANT-HOME), schreiben Sie fest, prüfen Sie, ob sie erweitert sind. Wenn dies der Fall ist, fahren Sie mit dem Festschreiben der nächsten Ebene fort, prüfen Sie ... Sie haben die Idee.

AKTUALISIERTE ANTWORT - Definieren permanenter Umgebungsvariablen mithilfe der CLI und der GUI - Scrollen Sie nach unten, um die ursprüngliche Antwort zu erhalten

GUI-Methode:

Geben Sie unter Windows 7 einfach "system" in die META-Eingabeaufforderung ein und Sie sehen einen Eintrag "Systemumgebungsvariablen bearbeiten". Klicken Sie dort auf "Umgebungsvariablen". Dort können Sie entweder die Systemvariable PATH (untere Liste) bearbeiten oder den Benutzerumgebungsvariablen eine neue PATH-Variable hinzufügen / bearbeiten.

Befehlszeilenmethode:

Um Umgebungsvariablen dauerhaft zu ändern, müssen Sie den Befehl SETX in der Windows-Befehlszeile verwenden. Im Gegensatz zu anderen Windows-Versionen ist Windows 7 integriert. Die Syntax unterscheidet sich stark von der von SET, ist aber auch leistungsstark. Sie müssen allerdings etwas vorsichtig sein, es ist einfach, Ihre Variablen mit SETX durcheinander zu bringen.

  • Standardmäßig ändern Sie Benutzervariablen . Sie können eine PATH-Benutzerumgebungsvariable haben, die problemlos mit der System-PATH-Variablen koexistiert. Wenn Sie es noch nicht definiert haben, geben Sie Folgendes ein:SETX PATH yourpath

  • Sie können der Systemvariablen PATH auch einen Wert hinzufügen. Dazu müssen Sie zuerst eine Befehlszeile mit Administratorrechten aufrufen. Um dies zu tun, drücken Sie die Meta Taste (Windows), Art cmdund Hit CTRL+ SHIFT+ ENTERund bestätigen Sie die UAC - Dialog.

Um dem Pfad neue Werte hinzuzufügen, können Sie jetzt eingeben

setx path "%path%;yournewpath" /m

Es ist wichtig, diese Syntax zu befolgen! Wenn Sie% path% nicht zuerst einschließen, gehen alle vorhandenen Pfadwerte verloren und werden nur durch Ihren neuen Pfad ersetzt. Der Schalter / m am Ende setzt die Variable in der Systemumgebung.

Bitte beachten Sie, dass Sie eine neue Befehlszeile aufrufen müssen, um Ihre neue Variable verwenden zu können.

Es gibt auch eine vollständige Referenz für SETX bei TechNet .

ALTE ANTWORT Der Befehl SET aktualisiert die Variablen nur für die Dauer der aktuellen Befehlszeilensitzung.

Die korrekte Syntax zum Hinzufügen eines Werts zu einer Variablen lautet "set [Variable] =% [Variable]%; [neuer Wert]"

Beachten Sie, dass Sie links vom Gleichheitszeichen die Prozentzeichen weglassen müssen!

Quelle: TechNet-Befehlszeilenreferenz für Windows Server


1
Vielen Dank für eine sehr detaillierte Antwort. Ich persönlich habe die GUI-Methode immer bevorzugt, weil ich denke, dass es einfacher ist, mit meinem Team zu kommunizieren. Ich habe das Problem, das ich in meinem ursprünglichen Beitrag habe, der Klarheit halber hervorgehoben. Die Benutzervariablen werden in Windows 7 nicht wie in Windows XP erweitert. Funktioniert dies nicht mehr oder sollte ich die Sicherheits- oder andere Systemadministratoreinstellungen untersuchen, die möglicherweise das übliche Verhalten blockieren?
Michael Prescott

Das ist eine sehr schöne Art zu sagen "Du bist völlig daneben";)
Tobias Plutat

... und jetzt meine 2 Cent auf die eigentliche Frage. Siehe neueste Antwort bearbeiten.
Tobias Plutat

1

Ein Microsoft Support-Artikel aus dem Jahr 2007 - Nummer 329308 - beschreibt einen Fehler in Shell32.dll, der die Ursache für dieses Problem ist. Die Lösung besteht darin PATH, der Benutzervariablenliste eine Variable hinzuzufügen , die auf eingestellt ist

%ANT_HOME%\bin;%JAVA_HOME%\bin

Dies hat das Problem umgangen. Ich mag es nicht, es nur für meinen Benutzer einzustellen, aber irgendwie zeigt mein System Symptome dieses alten Fehlers und ich sehe noch keine bessere Antwort.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.