Festlegen einer Systemumgebungsvariablen aus einer Windows-Batchdatei?

195

Ist es möglich, eine Umgebungsvariable auf Systemebene über eine Eingabeaufforderung in Windows 7 (oder sogar XP) festzulegen? Ich verwende eine Eingabeaufforderung mit erhöhten Rechten.

Wenn ich den setBefehl ( set name=value) verwende, scheint die Umgebungsvariable nur für die Sitzung der Eingabeaufforderung gültig zu sein.

Santhosh
quelle

Antworten:

179

Die XP-Support-Tools (die von Ihrer XP-CD installiert werden können) enthalten ein Programm mit dem Namen setx.exe:

C:\Program Files\Support Tools>setx /?

SETX: This program is used to set values in the environment
of the machine or currently logged on user using one of three modes.

1) Command Line Mode: setx variable value [-m]
   Optional Switches:
    -m  Set value in the Machine environment. Default is User.

...
For more information and example use: SETX -i

Ich denke, Windows 7 wird tatsächlich setxals Teil einer Standardinstallation geliefert.

Hugh Allen
quelle
7
Windows 7 (vielleicht schon Vista) hat SetX-Standard, mit einer kleinen Änderung? Es gibt keine -iFlagge und nur das Ausführen setx /?zeigt alle Hilfe + Beispiele
stijn
3
Denken Sie daran, dass Sie jederzeit überprüfen können, ob sich dieses Programm auf Ihrem Pfad befindet, indem Sie whereund dann den Namen des Programms eingeben. In diesem Fall where setx.exestellte ich beim Testen auf einem Server 2008- und Server 2008SP2-Feld fest, dass es in beiden Fällen unter%windir%\System32\setx.exe
Aolszowka
2
@stijn - Die Win7-Version hat auch den Flag-Einführer offiziell vom -Schrägstrich geändert /. Es sieht jedoch so aus, als ob die -Version immer noch funktioniert.
TED
2
Es scheint eine Längenbeschränkung von 1024 für den Inhalt der setx-Variablen zu geben
zhy2002
Der von XP SP2 Support Tools bereitgestellte Setx erfordert einen Schrägstrich /und der Bindestrich -funktioniert nicht. setx variable value /m
Keith
137

Einfaches Beispiel für das Festlegen von JAVA_HOME setx.exein der Befehlszeile:

setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_04"

Dadurch wird die Umgebungsvariable "JAVA_HOME" für den aktuellen Benutzer festgelegt. Wenn Sie eine Variable für alle Benutzer festlegen möchten, müssen Sie die Option "-m" verwenden. Hier ist ein Beispiel:

setx -m JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_04"

Hinweis : Sie müssen diesen Befehl als Administrator ausführen.

Hinweis : Stellen Sie sicher, dass Sie den Befehl setx in einem Befehlszeilen-Admin-Fenster ausführen

Mindaugas Jaraminas
quelle
7
Beachten Sie auch, dass einige Tools keine Leerzeichen in JAVA_HOME mögen, daher lohnt es sich, sie Progra~1wie setx /M JAVA_HOME "C:\Progra~1\Java\jdk1.7.0_09"
folgt
1
Wo war das mein ganzes Leben lang?
Philip Rego
20

Wenn Sie eine Variable über SETX festlegen, können Sie diese Variable oder ihre Änderungen nicht sofort verwenden. Sie müssen die Prozesse neu starten, die es verwenden möchten.

Verwenden Sie die folgende Sequenz, um sie auch direkt im Einstellungsprozess festzulegen (funktioniert perfekt für Skripte, die nach dem Festlegen globaler Variablen einige Init-Aufgaben ausführen) :

SET XYZ=test
SETX XYZ test
Anton F.
quelle
Danke, das hat mich verrückt gemacht! CMD.EXE benötigt dringend ein Upgrade, um sich wie eine normale Konsole zu verhalten ...!
Salvador Valencia
Ich verstehe das nicht: Wo führe ich diese 2 Zeilen?
Danijel
1
Sie können den Befehl auch ausführen, refreshenvnachdem Sie setx verwendet haben, um die neuen Variablen zu verwenden.
BrianHVB
@BrianHVB wird refreshenvnicht als Befehl erkannt. Machst du das in cmdoder powershell? (EDIT: in beiden tatsächlich getestet, funktioniert in beiden Konsolen nicht)
bigp
@bigp oops, du hast recht. Es ist ein Befehl, der hinzugefügt wird, wenn schokoladig installiert wird. Ich habe auf allen meinen Systemen schokoladig und habe es erst bemerkt, als ich es nachgeschlagen habe.
BrianHVB
2

Für XP habe ich ein (kostenloses / Donateware-) Tool namens "RAPIDEE" (Rapid Environment Editor) verwendet, aber SETX ist definitiv für Win 7 ausreichend (das wusste ich vorher nicht).

FractalSpace
quelle
2

Systemvariablen können über CMD und Registrierung festgelegt werden. Registrierungsabfrage "HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment" / v PATH

Alle häufig verwendeten CMD-Codes und Systemvariablen finden Sie hier: Legen Sie Windows-Systemumgebungsvariablen mithilfe von CMD fest .

Öffnen Sie CMD und geben Sie Set ein

Sie erhalten alle Werte der Systemvariablen.

Geben Sie set java ein , um die Pfaddetails von Java zu erfahren, das auf Ihrem Windows-Betriebssystem installiert ist.

Himanshu Singh
quelle
1

Für den Fall, dass Sie eine Variable löschen müssen, können Sie SETENV von Vincent Fatica verwenden, das unter http://barnyard.syr.edu/~vefatica verfügbar ist . Nicht gerade neu ('98), aber immer noch unter Windows 7 x64.

abbrechen
quelle
5
Mit setx können Sie auch löschen, indem Sie den Wert auf leer setzen
Steve Lloyd