¿Por qué puedo ejecutar un programa que no está en mi variable de entorno PATH?

9

Me preguntaba por qué el comando java -versiones accesible globalmente .

Podría ejecutarlo desde cualquier directorio y funciona:

ingrese la descripción de la imagen aquí

¿Como funciona?

Así es PATHcomo se ve mi variable de sistema :

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

En cuanto a mí, java.exese encuentra en%programfiles%\java\jre7\bin

Pacerier
fuente
2
Ver aquí .
Daniel Beck
No tengo los detalles a la mano en este momento, por eso es un comentario y no una respuesta, pero si java.exe(o java.com, etc.) no está en su cuenta, PATHhay otra entrada de registro que puede especificar rutas ejecutables.
Mark Hurd el
1
@MarkHurd cmd (y CreateProcess) no examina la entrada de registro de rutas de aplicaciones, solo ShellExecute [y, por lo tanto, el cuadro de diálogo Ejecutar] lo hacen.
Random832
@MarkHurd, como se ha esperado, es no en mi variable de ruta ..
Pacerier
1
@Pacerier El ejecutable de Java se encuentra en% SystemRoot% \ System32 \
Dwayne Hinterlang el

Respuestas:

13

Por lo general, hay un grupo de directorios donde su Windows puede encontrar archivos ejecutables que se usan repetidamente, pero en la práctica no hay una razón específica para usar un comando como global o no. Los desarrolladores solían incluirlo como "global" donde quieran, son libres de hacerlo. Si desea utilizar cualquier comando como "global", deberá agregar su comando como "Variable de entorno de Windows" . Para hacer esto, puede usar los siguientes métodos :

  1. Agregar manualmente con "Propiedades del sistema de Windows": ingrese la descripción de la imagen aquí

  2. Usando la herramienta complementaria Setx.exe:

No forma parte de la configuración estándar de Windows XP, pero las herramientas de soporte de Windows XP Service Pack 2 incluyen una herramienta de línea de comandos llamada setx.exe. Esta herramienta extiende el comando set para que se puedan realizar cambios permanentes en las variables de entorno. Por ejemplo, para agregar una carpeta C: \ Nueva carpeta a la ruta, el comando sería

setx path "%PATH%;C:\New Folder" 
  1. Scripts para enumerar variables de entorno:

El comando "Establecer" se puede usar en un símbolo del sistema junto con una redirección a un archivo de texto para hacer una lista de las variables de entorno actuales. El comando puede ser

set > C:\env_list.txt 

El nombre de archivo "C: \ env_list.txt" puede ser reemplazado por cualquiera de su elección.

Microsoft también tiene un VBScript que enumera las variables de entorno en esta página .

  1. Claves de registro para variables de entorno:

Para aquellos que tienen experiencia en la edición del Registro, hay otra forma de hacer cambios en las variables de entorno. Las variables de entorno del usuario se almacenan en el Registro en la clave:

HKEY_CURRENT_USER\Environment

Las variables del sistema se encuentran en la clave:

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

Tenga en cuenta que cualquier variable de entorno que tenga la forma que necesita expandirse (por ejemplo,% PATH%) debe almacenarse en el registro como un valor de registro REG_EXPAND_SZ. La edición del Registro es principalmente para los scripts utilizados por los administradores de sistemas y no se recomienda para el usuario promedio de PC.

Puede encontrar más información al respecto aquí.

Diogo
fuente
1
Sin embargo, java.exe se encuentra en %programfiles%\java\jre7\bin. Esta carpeta no aparece en la variable de ruta de mi sistema ...
Pacerier
77
Java.exe también se encuentra en% SystemRoot% \ System32 \ que aparece en su variable PATH
Dwayne Hinterlang
5

Los "Comandos globales" están determinados por las variables de entorno.

Dependiendo de qué sistema operativo esté utilizando para acceder a él, es bastante diferente.

La forma más genérica es por

Haga clic derecho en "Mi PC" Seleccione "Propiedades"

En Windows7 tendrá que seleccionar "Configuración avanzada del sistema" en el panel de la izquierda.

Una vez que tenga abierto el cuadro de diálogo Propiedades del sistema, seleccione la pestaña "Avanzado".

En la parte inferior, hay un botón "Variables de entorno"

En el cuadro de diálogo Variables de entorno, podrá configurar variables de entorno por usuario o para todo el sistema.

Por ejemplo, la "Ruta" de la variable del sistema simplificada se vería así ...

C: \ Archivos de programa \ Java \ jre6 \ bin ; C: \ Ruby19 \ bin;

Los ejecutables en estas rutas se pueden llamar directamente desde la línea de comandos.

La razón por la que puede llamar a calc, mspaint, cmd todo desde el cuadro de diálogo Ejecutar es porque C: \ windows \ system32 está en la variable de entorno Path.

Puede agregar rutas personalizadas a las variables ambientales, con cuidado de no anular la existente y separar las rutas con un punto y coma. ";"

Luego puede ejecutar un ejecutable desde esa ruta directamente en la línea de comandos sin escribir la ruta completa, como el comando java -version.

Para más información, consulte los siguientes enlaces ...

Variables de entorno

Comprender y configurar variables de entorno

Búsqueda de Java.exe en una nueva instalación

Dwayne Hinterlang
fuente
3

Aquí hay un simple whichque muestra todos los golpes de comando en PATH para las extensiones PATHEXT actuales:

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

Pon eso where.cmd(permitiendo whichque venga de otro lugar si lo obtienes) y llámalo con where java.

Ahora, en mi comentario anterior, me sugirió que si javano no aparecerá en su PATH, se puede comprobar en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths [ref] , pero después en realidad tratando de esto, no funciona con la línea de comandos, sólo que con las cosas que el uso ShellExecuteEx, tales como Ejecutar y el startcomando CLI.

Mark Hurd
fuente
2

Cuando ingresa un comando, el shell observa una variable de entorno llamada PATH (% PATH%, $ PATH dependiendo del sistema operativo). Consulta cada directorio en la RUTA para ver si encuentra un ejecutable que coincida con el comando que ingresó. Se ejecutará el primero que encuentre.

Consulte otras respuestas para conocer algunas de las diversas formas de establecer la variable PATH.

Dennis S.
fuente