Pourquoi suis-je capable d'exécuter un programme qui n'est pas dans ma variable d'environnement PATH?

9

Je me demandais pourquoi la commande java -versionest globalement accessible?

Je pourrais l'exécuter à partir de n'importe quel répertoire et son fonctionnement:

entrez la description de l'image ici

Comment ça marche?

Voici à quoi PATHressemble ma variable système :

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

Quant à moi, java.exeest situé dans%programfiles%\java\jre7\bin

Pacerier
la source
2
Voyez ici .
Daniel Beck
Je n'ai pas les détails à portée de main pour le moment, c'est pourquoi il s'agit d'un commentaire et non d'une réponse, mais si java.exe(ou java.com, etc.) n'est pas dans votre, PATHil existe une autre entrée de registre qui peut spécifier des chemins exécutables.
Mark Hurd
1
@MarkHurd cmd (et CreateProcess) n'examine pas l'entrée de Registre App Paths, seulement ShellExecute [et donc la boîte de dialogue Exécuter] le fait.
Random832
@MarkHurd, comme vous vous y attendiez, ce n'est pas dans ma variable de chemin ..
Pacerier
1
@Pacerier L'exécutable java se trouve dans% SystemRoot% \ System32 \
Dwayne Hinterlang

Réponses:

13

En règle générale, il existe un groupe de répertoires où les fichiers exécutables qui sont utilisés à plusieurs reprises doivent être trouvés par votre Windows, mais dans la pratique, il n'y a aucune raison spécifique d'utiliser une commande comme globale ou non. Les développeurs avaient l'habitude de l'inclure comme «global» où ils le souhaitaient, ils étaient libres de le faire. Si vous souhaitez utiliser une commande comme "globale", vous devrez ajouter votre commande en tant que "Variable Windows Enviroment" . Pour ce faire, vous pouvez utiliser les méthodes suivantes :

  1. Ajout manuel avec "Propriétés système Windows": entrez la description de l'image ici

  2. À l'aide de l'outil complémentaire Setx.exe:

Il ne fait pas partie de la configuration standard de Windows XP, mais un outil en ligne de commande appelé setx.exe est inclus dans les outils de support de Windows XP Service Pack 2. Cet outil étend la commande set afin que des modifications permanentes des variables d'environnement puissent être apportées. Par exemple, pour ajouter un dossier C: \ New Folder au chemin, la commande serait

setx path "%PATH%;C:\New Folder" 
  1. Scripts pour lister les variables d'environnement:

La commande "Set" peut être utilisée dans une invite de commande avec une redirection vers un fichier texte pour faire une liste des variables d'environnement actuelles. La commande peut être

set > C:\env_list.txt 

Le nom de fichier "C: \ env_list.txt" peut être remplacé par celui de votre choix.

Microsoft a également un VBScript qui répertorie les variables d'environnement sur cette page .

  1. Clés de registre pour les variables d'environnement:

Pour ceux qui ont l'habitude de modifier le Registre, il existe un autre moyen d'apporter des modifications aux variables d'environnement. Les variables d'environnement utilisateur sont stockées dans le Registre dans la clé:

HKEY_CURRENT_USER\Environment

Les variables système se trouvent dans la clé:

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

Notez que toute variable d'environnement sous la forme qui doit être développée (par exemple,% PATH%) doit être stockée dans le Registre en tant que valeur de Registre REG_EXPAND_SZ. La modification du registre concerne principalement les scripts utilisés par les administrateurs système et n'est pas recommandée pour l'utilisateur moyen d'un PC.

Vous pouvez trouver plus d'informations à ce sujet ici.

Diogo
la source
1
Cependant, java.exe se trouve dans %programfiles%\java\jre7\bin. Ce dossier n'apparaît pas dans la variable Path de mon système.
Pacerier
7
Java.exe se trouve également dans% SystemRoot% \ System32 \ qui apparaît dans votre variable PATH
Dwayne Hinterlang
5

Les "commandes globales" sont déterminées par vos variables d'environnement.

Selon le système d'exploitation que vous utilisez pour y accéder, il est assez différent.

La façon la plus générique est de

Faites un clic droit sur "Poste de travail" Sélectionnez "Propriétés"

Sous Windows7, vous devrez sélectionner "Paramètres système avancés" dans le volet de gauche.

Une fois la boîte de dialogue Propriétés système ouverte, sélectionnez l'onglet "Avancé".

En bas, il y a un bouton "Variables d'environnement"

Dans la boîte de dialogue Variables d'environnement, vous pourrez configurer des variables d'environnement par utilisateur ou pour l'ensemble du système.

Par exemple, la variable système "Path" simplifiée ressemblerait à ceci ...

C: \ Program Files \ Java \ jre6 \ bin ; C: \ Ruby19 \ bin;

Les exécutables de ces chemins peuvent être appelés directement à partir de la ligne de commande.

La raison pour laquelle vous pouvez appeler calc, mspaint, cmd all à partir de la boîte de dialogue Exécuter est parce que C: \ windows \ system32 se trouve dans la variable d'environnement Path.

Vous pouvez ajouter des chemins personnalisés dans les variables d'environnement, en veillant à ne pas remplacer celui existant et à séparer les chemins à l'aide d'un point-virgule. ";"

Vous pouvez ensuite exécuter un exécutable à partir de ce chemin directement en ligne de commande sans taper le chemin entier, comme la commande java -version.

Pour plus de lecture, veuillez consulter les liens suivants ...

Variables d'environnement

Comprendre et configurer les variables d'environnement

Recherche Java.exe sur une nouvelle installation

Dwayne Hinterlang
la source
3

Voici un simple whichqui affiche tous les appels de commande dans PATH pour les extensions PATHEXT actuelles:

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

Mettez-le where.cmd(en permettant whichde venir d'ailleurs si vous l'obtenez!) Et appelez-le avec where java.

Maintenant, dans mon commentaire ci-dessus, j'ai suggéré que si javan'apparaissait pas dans votre PATH, vous pouvez vous enregistrer HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths [ref] , mais après avoir réellement essayé cela, cela ne fonctionne pas avec la ligne de commande, uniquement avec des choses qui utilisent ShellExecuteEx, comme Démarrer Exécuter et la startcommande CLI.

Mark Hurd
la source
2

Lorsque vous entrez une commande, le shell examine une variable d'environnement nommée PATH (% PATH%, $ PATH selon le système d'exploitation). Il interroge chaque répertoire du PATH pour voir s'il rencontre un exécutable qui correspond à la commande que vous avez entrée. Le premier qu'il trouvera sera exécuté.

Voir les autres réponses pour certaines des différentes façons de définir la variable PATH.

Dennis S.
la source