Warum kann ich ein Programm ausführen, das sich nicht in meiner Umgebungsvariablen PATH befindet?

9

Ich frage mich , warum der Befehl java -versionist global zugänglich?

Ich könnte es aus jedem Verzeichnis ausführen und es funktioniert:

Geben Sie hier die Bildbeschreibung ein

Wie funktioniert es?

So PATHsieht meine Systemvariable aus:

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

Was mich betrifft, java.exebefindet sich in%programfiles%\java\jre7\bin

Pacerier
quelle
2
Siehe hier .
Daniel Beck
Ich habe im Moment keine Details zur Hand, weshalb dies ein Kommentar und keine Antwort ist, aber wenn java.exe(oder java.comusw.) nicht in Ihrem enthalten ist, PATHgibt es einen anderen Registrierungseintrag, der ausführbare Pfade angeben kann.
Mark Hurd
1
@MarkHurd cmd (und CreateProcess) untersuchen den Registrierungseintrag für App-Pfade nicht, sondern nur ShellExecute [und damit das Dialogfeld Ausführen].
Random832
@ MarkHurd, wie Sie erwartet haben, ist es nicht in meiner
Pfadvariablen
1
@ Pacerier Die ausführbare Java-Datei befindet sich in% SystemRoot% \ System32 \
Dwayne Hinterlang

Antworten:

13

In der Regel gibt es eine Gruppe von Verzeichnissen, in denen ausführbare Dateien, die wiederholt verwendet werden, von Ihrem Windows gefunden werden. In der Praxis gibt es jedoch keinen bestimmten Grund, einen Befehl als global zu verwenden oder nicht. Entwickler haben es früher als "global" aufgenommen, wo immer sie wollen, sie können es tun. Wenn Sie einen Befehl als "global" verwenden möchten, müssen Sie Ihren Befehl als "Windows-Umgebungsvariable" hinzufügen . Dazu können Sie die folgenden Methoden verwenden :

  1. Manuelles Hinzufügen mit "Windows-Systemeigenschaften": Geben Sie hier die Bildbeschreibung ein

  2. Verwenden des Add-On-Tools Setx.exe:

Es ist nicht Teil des Standard-Windows XP-Setups, aber ein Befehlszeilentool namens setx.exe ist in den Windows XP Service Pack 2-Supporttools enthalten. Dieses Tool erweitert den Befehl set, sodass dauerhafte Änderungen an den Umgebungsvariablen vorgenommen werden können. Um beispielsweise dem Pfad einen Ordner C: \ New Folder hinzuzufügen, lautet der Befehl

setx path "%PATH%;C:\New Folder" 
  1. Skripte zum Auflisten von Umgebungsvariablen:

Der Befehl "Set" kann in einer Eingabeaufforderung zusammen mit einer Umleitung in eine Textdatei verwendet werden, um eine Liste der aktuellen Umgebungsvariablen zu erstellen. Der Befehl könnte sein

set > C:\env_list.txt 

Der Dateiname "C: \ env_list.txt" kann durch einen beliebigen Ihrer Wahl ersetzt werden.

Microsoft hat auch ein VBScript, das Umgebungsvariablen auf dieser Seite auflistet .

  1. Registrierungsschlüssel für Umgebungsvariablen:

Für diejenigen, die Erfahrung mit der Bearbeitung der Registrierung haben, gibt es eine andere Möglichkeit, Änderungen an Umgebungsvariablen vorzunehmen. Benutzerumgebungsvariablen werden in der Registrierung im folgenden Schlüssel gespeichert:

HKEY_CURRENT_USER\Environment

Systemvariablen finden Sie im Schlüssel:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Beachten Sie, dass jede Umgebungsvariable in der Form, die erweitert werden muss (z. B.% PATH%), in der Registrierung als REG_EXPAND_SZ-Registrierungswert gespeichert werden muss. Das Bearbeiten der Registrierung gilt hauptsächlich für Skripts, die von Systemadministratoren verwendet werden, und wird für den durchschnittlichen PC-Benutzer nicht empfohlen.

Weitere Informationen dazu finden Sie hier.

Diogo
quelle
1
Java.exe befindet sich jedoch in %programfiles%\java\jre7\bin. Dieser Ordner erscheint nicht in der
Pfadvariablen
7
Java.exe ist auch in% SystemRoot% \ System32 \ enthalten, das in Ihrer PATH-Variablen
Dwayne Hinterlang
5

"Globale Befehle" werden durch Ihre Umgebungsvariablen bestimmt.

Je nachdem, welches Betriebssystem Sie verwenden, um es einzustellen, ist es ziemlich unterschiedlich.

Der allgemeinste Weg ist durch

Klicken Sie mit der rechten Maustaste auf "Arbeitsplatz". Wählen Sie "Eigenschaften".

In Windows 7 müssen Sie links im Bereich "Erweiterte Systemeinstellungen" auswählen.

Wenn Sie das Dialogfeld Systemeigenschaften geöffnet haben, wählen Sie die Registerkarte "Erweitert".

Unten befindet sich eine Schaltfläche "Umgebungsvariablen".

Im Dialogfeld Umgebungsvariablen können Sie Umgebungsvariablen pro Benutzer oder für das gesamte System konfigurieren.

Zum Beispiel würde die vereinfachte Systemvariable "Pfad" ungefähr so ​​aussehen ...

C: \ Programme \ Java \ jre6 \ bin ; C: \ Ruby19 \ bin;

Ausführbare Dateien in diesen Pfaden können direkt über die Befehlszeile aufgerufen werden.

Der Grund, warum Sie calc, mspaint, cmd im Dialogfeld "Ausführen" aufrufen können, liegt darin, dass sich C: \ windows \ system32 in der Umgebungsvariablen "Pfad" befindet.

Sie können den Umgebungsvariablen benutzerdefinierte Pfade hinzufügen, wobei Sie darauf achten, die vorhandenen nicht zu überschreiben und die Pfade mithilfe eines Semikolons zu trennen. ";"

Sie können dann eine ausführbare Datei von diesem Pfad direkt in der Befehlszeile ausführen, ohne den gesamten Pfad wie den Befehl java -version eingeben zu müssen.

Weitere Informationen finden Sie unter den folgenden Links ...

Umgebungsvariablen

Umgebungsvariablen verstehen und konfigurieren

Java.exe Suche bei einer Neuinstallation

Dwayne Hinterlang
quelle
3

Hier ist eine einfache whichMethode, die alle Befehlstreffer in PATH für die aktuellen PATHEXT-Erweiterungen anzeigt:

@for %%I in ("%path:;=\" "%") do @for %%E in (%pathext:;= %) do @if exist "%%~dpI%1%%E" @echo %%~dpI%1%%E

Setzen Sie das ein where.cmd(erlauben Sie which, von woanders zu kommen, wenn Sie es bekommen!) Und rufen Sie es mit an where java.

In meinem obigen Kommentar habe ich vorgeschlagen, dass Sie [ref] einchecken können , wenn javadies nicht in Ihrem angezeigt wird. Nachdem Sie dies tatsächlich versucht haben, funktioniert es nicht mit der Befehlszeile, sondern nur mit Dingen, die verwendet werden , wie z. B. Start Run und der CLI-Befehl.PATHHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths ShellExecuteExstart

Mark Hurd
quelle
2

Wenn Sie einen Befehl eingeben, betrachtet die Shell eine Umgebungsvariable mit dem Namen PATH (% PATH%, $ PATH je nach Betriebssystem). Es fragt jedes Verzeichnis im PATH ab, um festzustellen, ob es auf eine ausführbare Datei stößt, die dem von Ihnen eingegebenen Befehl entspricht. Der erste, den es findet, wird ausgeführt.

In den anderen Antworten finden Sie einige der verschiedenen Möglichkeiten zum Festlegen der PATH-Variablen.

Dennis S.
quelle