Agregar directorio a la variable de entorno PATH en Windows


526

Estoy tratando de agregar C:\xampp\phpa mi PATHvariable de entorno del sistema en Windows.

Ya lo he agregado usando el cuadro de diálogo Variables de entorno.

Pero cuando escribo en mi consola:

C:\>path

no muestra el nuevo C:\xampp\phpdirectorio:

PATH=D:\Program Files\Autodesk\Maya2008\bin;C:\Ruby192\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\PROGRA~1\DISKEE~2\DISKEE~1\;c:\Program Files\Microsoft SQL
Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;D:\Program Files\TortoiseSVN\bin
;D:\Program Files\Bazaar;C:\Program Files\Android\android-sdk\tools;D:\Program Files\
Microsoft Visual Studio\Common\Tools\WinNT;D:\Program Files\Microsoft Visual Studio\Common
\MSDev98\Bin;D:\Program Files\Microsoft Visual Studio\Common\Tools;D:\Program Files\
Microsoft Visual Studio\VC98\bin

Tengo dos preguntas:

  1. ¿Por qué pasó esto? ¿Hay algo que hice mal?
  2. Además, ¿cómo agrego directorios a mi PATHvariable usando la consola (y programáticamente, con un archivo por lotes)?

43
Esto es sobre el tema porque se trata de 'herramientas que los programadores usan comúnmente'. Si desarrollas en Windows y nunca has necesitado modificar la RUTA, me sorprende. Para saciar el deseo de estar relacionado con la programación, he resaltado lo que señaló la respuesta más votada: puede hacer esto mediante programación a través de la consola (o mediante un archivo por lotes).
George Stocker

1
gracias por la revisión @GeorgeStocker bueno, sí, lo hice mediante programación y no he tenido la idea de que necesito volver a iniciar sesión después de aplicar los cambios en la sesión de la consola. (y creo que es solo en mi caso), pero la respuesta más votada generalmente responde a la pregunta
Netorica

1
@George: de acuerdo, pero tal como está, esta pregunta está escrita para Superusuario y no para Stack Overflow. Super User proporcionará ayuda con las configuraciones del servidor web para uso personal. Stack Overflow es para preguntas de programación.
jww

1
Salga y abra una nueva consola ... Si está usando bash, eso puede requerir un reinicio del sistema antes de que los cambios persistan, dependiendo de cómo / qué esté usando.
Rastreador1

Respuestas:


148

Esto solo modifica el registro. Un proceso existente no usará estos valores. Un nuevo proceso lo hará si se inicia después de este cambio y no hereda el entorno anterior de su padre.

No especificó cómo comenzó la sesión de la consola. La mejor manera de garantizar esto es salir del shell de comandos y ejecutarlo nuevamente. Entonces debería heredar la RUTA actualizada.


99
Hmm, no, realmente realmente solo modifica el registro. Debería ser un poco obvio hacer esto en un cuadro de diálogo del Panel de control en lugar de, por ejemplo, el símbolo del sistema con el comando PATH. Puede observar lo que hace fácilmente con el Monitor de proceso de SysInternals, si le importa. Usar PATH no es lo mismo, cualquier cambio que realice se perderá cuando se cierre la consola. SETX es una forma de hacer cambios persistentes, como el diálogo.
Hans Passant

3
Esto es correcto. Siempre debe reiniciar la sesión de la consola antes de que elija nuevas variables de entorno.
BrainSlugs83

1
¿La sesión de consola actualizaría las variables si WM_SETTINGCHANGEse enviara un mensaje desde una aplicación? stackoverflow.com/a/8358361
John_West

Es teóricamente posible, ninguna implementación práctica de CRT que conozca realmente hace esto. Explorer hace.
Hans Passant

1
Información de fondo que corrobora esto: blogs.msdn.microsoft.com/oldnewthing/20150915-00/?p=91591
Euro Micelli

961

Opción 1

Después de cambiar PATHcon la GUI, cierre y vuelva a abrir la ventana de la consola.

Esto funciona porque solo los programas iniciados después del cambio verán lo nuevo PATH.

opcion 2

Ejecute este comando en la ventana de comandos que ha abierto:

set PATH=%PATH%;C:\your\path\here\

Este comando se agrega C:\your\path\here\al actual PATH.

Desglosándolo:

  • set- Un comando que cambia las variables de entorno de cmd solo para la sesión de cmd actual ; otros programas y el sistema no se ven afectados.
  • PATH=- Significa que PATHes la variable de entorno que se cambiará temporalmente.
  • %PATH%;C:\your\path\here\- La %PATH%parte se expande al valor actual de PATH, y ;C:\your\path\here\luego se concatena a ella. Esto se convierte en lo nuevo PATH.

16
@Ilya: Quise decir que abrieras la ventana de la consola después de que se cambiara la ruta en MyComputer-> Properties-> Advanced-> Env Variables-> Path. Algunas aplicaciones de Windows propagarán los cambios de las variables de entorno después de que se inicien y otras no. WinXP cmd.exe no lo hace.
JimR

77
Si salgo de la consola y vuelvo a ejecutar, tengo que restablecer la ruta. ¿Alguna idea de cómo hacer que este cambio sea permanente?
David 天宇 Wong

2
@David 天宇 Wong Si sigue "Mi PC"> "Propiedades"> "Avanzado"> "Variables de entorno"> "Ruta". y agregue el directorio al final de esa cadena, se mantendrá. Solo asegúrese de abrir la consola después de realizar el cambio.
theB3RV

Sí @ theB3RV, es un largo camino para hacer algo simple. Es extraño que no haya un comando persistente que se pueda escribir en la consola
David 天宇 Wong

12
@David 天宇 Wong Acabo de encontrar "SETX es una forma de hacer cambios persistentes, como el diálogo". así que el comando SETX debería hacerlo
theB3RV

202

ADVERTENCIA: Esta solución puede ser destructiva para su RUTA y la estabilidad de su sistema. Como efecto secundario, fusionará su RUTA de usuario y del sistema, y ​​truncará la RUTA a 1024 caracteres. El efecto de este comando es irreversible. Haga una copia de seguridad de PATH primero. Vea los comentarios para más información.

No copie y pegue ciegamente esto. Usar con precaución.

Puede agregar permanentemente una ruta PATHcon el setxcomando:

setx /M path "%path%;C:\your\path\here\"

Elimine la /Mbandera si desea configurar el usuario en PATHlugar del sistema PATH.

Notas:

  • El setxcomando solo está disponible en Windows 7 y versiones posteriores.
  • Debe ejecutar este comando desde un símbolo del sistema elevado.

  • Si solo desea cambiarlo para la sesión actual, use set .


77
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"establecer el valor de la RUTA a nivel de máquina
Lu55

77
¿Por qué esta no es la respuesta aceptada? Me imagino que la mayoría de la gente querría establecer su camino de forma permanente ...
Peter Gordon


99
ADVERTENCIA : Debido al uso de la %PATH%variable, este comando combina las variables env globales con las de los usuarios. ¿No es así? Esto puede crear efectos secundarios no deseados, especialmente con el
modificador

44
ADVERTENCIA 2: La %PATH%variable puede no estar en sintonía con las variables de entorno, ya que se carga en el lanzamiento del símbolo del sistema y nunca vuelve a cargar después (incluso cuando se ejecuta el comando setx). También podría haber sido cambiado localmente por scripts ejecutados previamente.
FF_Dev

66

No necesita ninguno seto setxcomando, simplemente abra la terminal y escriba:

PATH

Esto muestra el valor actual de la variable PATH. ¿Ahora quieres agregarle un directorio? Simplemente escriba:

PATH %PATH%;C:\xampp\php

Si por alguna razón desea borrar la variable PATH (sin rutas o eliminar todas las rutas), escriba:

PATH ;

Actualizar

Como Danial Wilson señaló en el comentario a continuación, establece el camino solo en la sesión actual. Para establecer la ruta de forma permanente, use setxpero tenga en cuenta, aunque eso establece la ruta de forma permanente, pero NO en la sesión actual, por lo que debe iniciar una nueva línea de comando para ver los cambios, más información aquí .

Para verificar si existe una variable ambiental o ver su valor, use el comando ECHO:

echo %YOUR_ENV_VARIABLE%

1
Funcionó :) ¿qué tal eso? 'PATH% PATH%;' Puedo recordar eso
Dustin Woodard

12
Creo que esto solo funciona para la sesión de cmd, use setx para cambiarlo permanentemente
Daniel Wilson

2
No incluya citas con esto. Por ejemplo, llame en PATH %PATH%;C:\Program Files\...lugar dePATH "%PATH%;C:\Program Files\..."
icc97

44
¡No uses setx! Corre el riesgo de truncar su variable de ruta, perdiendo muchas otras rutas que pasó tiempo configurando. Preste atención a las advertencias anteriores.
STWilson

1
@STWilson, ¡demasiado tarde para ver tu comentario!
West Yang

48

¡Usaría PowerShell en su lugar!

Para agregar un directorio a PATH utilizando PowerShell, haga lo siguiente:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path")

Para establecer la variable para todos los usuarios, en toda la máquina, la última línea debería ser como:

[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")

En un script de PowerShell, es posible que desee verificar la presencia de su C:\xampp\phpantes de agregar a PATH (en caso de que se haya agregado previamente). Puedes envolverlo en un ifcondicional.

Poniéndolo todo junto:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
if( $PATH -notlike "*"+$xampp_path+"*" ){
    [Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
}

Mejor aún, uno podría crear una función genérica. Simplemente proporcione el directorio que desea agregar:

function AddTo-Path{
param(
    [string]$Dir
)

    if( !(Test-Path $Dir) ){
        Write-warning "Supplied directory was not found!"
        return
    }
    $PATH = [Environment]::GetEnvironmentVariable("PATH")
    if( $PATH -notlike "*"+$Dir+"*" ){
        [Environment]::SetEnvironmentVariable("PATH", "$PATH;$Dir", "Machine")
    }
}

Podrías mejorar las cosas puliendo un poco. Por ejemplo, usando Test-Pathpara confirmar que su directorio realmente existe.


3
para llamar SetEnvironmentVariablecon el Machineparámetro que necesita para abrir PowerShell con derechos de administrador
InsOp

es amargamente decepcionante que este shell de "poder" no reconozca% userprofile% ni $ userprofile ... pero, de nuevo, estamos hablando de ventanas
abbood

3
@abbood Lo que estás buscando es $env:userprofile.
nyuszika7h

3
También debe especificar cualquiera usero machineen la llamada de GetEnvironmentVariable. De lo contrario, $PATHcontendrá el valor de la parte del registro tanto del usuario como de la máquina, que explotará innecesariamente la variable de ruta al almacenarla nuevamente.
René Nyffenegger

35

SETX más seguro

Asiente con la cabeza a todos los comentarios sobre la respuesta inicial de @ NafscriptSETX .

  • SETXpor defecto actualizará su ruta de usuario .
  • SETX ... /Mactualizará la ruta de su sistema .
  • %PATH% contiene la ruta del sistema con la ruta del usuario añadida

Advertencias

  1. Haga una copia de seguridad de suPATH - SETXtruncará su basura más de 1024 caracteres
  2. No llamarSETX %PATH%;xxx : agrega la ruta del sistema a la ruta del usuario
  3. No llamarSETX %PATH%;xxx /M : agrega la ruta del usuario a la ruta del sistema
  4. El uso excesivo de archivos por lotes puede causar ceguera 1

La página ss64 SETX tiene algunos muy buenos ejemplos. Es importante señalar dónde están las claves de registro para SETXvsSETX /M

Variables de usuario:

HKCU\Environment

Variables del sistema:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Instrucciones de uso

Agregar al usuario PATH

append_user_path.cmd

@ECHO OFF
REM usage: append_user_path "path"
SET Key="HKCU\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > user_path_bak.txt
SETX PATH "%CurrPath%";%1

Agregar al sistema PATH

append_system_path.cmd. Debe ejecutarse como administrador.

(es básicamente lo mismo excepto con un diferente Keyy el SETX /Mmodificador)

@ECHO OFF
REM usage: append_system_path "path"
SET Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > system_path_bak.txt
SETX PATH "%CurrPath%";%1 /M

Alternativas

Finalmente, existe una versión potencialmente mejorada llamada SETENV recomendada por la página SETX ss64 que divide la configuración de las variables de entorno del usuario o del sistema.


1. No es estrictamente cierto


24

Tarde a la fiesta, pero útil si ya está en el directorio que desea agregar a PATH.

set PATH=%PATH%;%CD%

editar: según el comentario: funciona con cmd estándar de Windows pero no en PowerShell.

Para powershell, el %CD%equivalente es[System.Environment]::CurrentDirectory


1
Mi Powershell dice que% CD% no es reconocido.
Paulo Matos

@PauloMatos podría intentar usar[System.Environment]::CurrentDirectory
nclord

4

Además de todas las respuestas, si desea una buena herramienta GUI para editar sus variables de entorno de Windows, puede usar Rapid Environment Editor

¡intentalo! es seguro de usar e increíble!

http://www.rapidee.com/en/


2
Windows 10 ha mejorado significativamente el editor de variables de Path Path ahora. Solo les tomó 20 años acostumbrarse.
icc97

4
  • los cambios en la línea de comando no serán permanentes, se perderán cuando se cierre la consola.
  • El camino funciona como el primero que llega, primero se sirve.
  • Es posible que desee anular otros ejecutables ya incluidos. Por ejemplo, si ya tiene otra versión en su ruta y desea agregar una versión diferente sin hacer un cambio permanente en la ruta, debe colocar el directorio al comienzo del comando.

Para anular ejecutables ya incluidos;

establecer RUTA = C: \ xampp \ php;% RUTA%;


2

Verificando las sugerencias anteriores en Windows 10 LTSB, y con un vistazo a los contornos de "ayuda" (que se pueden ver al escribir 'command /?' En el cmd), llegué a la conclusión de que el comando PATH cambia la variable de entorno del sistema Los valores de ruta solo para la sesión actual, pero después de reiniciar, todos los valores se restablecen a sus valores predeterminados, tal como estaban antes de usar el comando PATH.

Por otro lado, usar el comando SETX con privilegios administrativos es mucho más poderoso, cambia esos valores para siempre (o al menos hasta la próxima vez que se use este comando o hasta la próxima vez que esos valores sean manipulados manualmente por la GUI ...).

Pero en aras de la claridad, pensé que compartir aquí el mejor uso de sintaxis SETX que me funcionó podría ayudar a alguien algún día:

SETX PATH "%PATH%;C:\path\to\where\the\command\resides"

donde se debe evitar cualquier signo igual '=', ¡y no te preocupes por los espacios! no es necesario insertar más comillas para una ruta que contiene espacios en su interior: el signo de división ';' Hacer el trabajo.

La palabra clave PATH que sigue a SETX define qué conjunto de valores se debe cambiar entre los valores posibles de las Variables de entorno del sistema, y ​​el% PATH% (la palabra PATH rodeada por el signo de porcentaje) dentro de las comillas, le dice al sistema operativo que deje el valor existente RUTA valores como son y agregue la siguiente ruta (la que sigue el signo de división ';') a los valores existentes.

HTH


2

Con respecto al punto 2 , estoy usando un archivo por lotes simple que está poblando PATHu otras variables de entorno para mí. Por lo tanto, no hay contaminación de las variables ambientales por defecto. Se puede acceder a este archivo por lotes desde cualquier lugar para que pueda escribir:

c:\>mybatchfile
-- here all env. are available
c:\>php file.php

Esta es una diferencia importante entre * nix-es y Windows. El lote se ejecuta en el mismo shell y los cambios en el entorno permanecen después de salir (en el ámbito de la sesión). Sin embargo, esto corta en ambos sentidos: un archivo por lotes puede destruir su entorno. (Por cierto, en * nix-es solo tendrías que hacer sourceun archivo así, como . mybatchfile)
Tomasz Gandor

Hola @ grzegorz-gajos, estaba buscando exactamente eso, su enlace para más detalles da 404. ¿Alguna alternativa?
devkabiir

Lo sentimos, el contenido del enlace ya no está disponible. Quite.
Grzegorz Gajos

1

En un símbolo del sistema, le dice a Cmd que use la línea de comando del Explorador introduciéndola con start.

Por lo tanto start Yourbatchname.

Tenga en cuenta que debe registrarse como si su nombre fuera batchfile.exe.

Se pueden agregar programas y documentos al registro, de modo que escribir su nombre sin su ruta en el cuadro de diálogo Inicio - Ejecutar o en el acceso directo permite que Windows los encuentre.

Este es un archivo de registro genérico. Copie las líneas a continuación en un nuevo documento de texto y guárdelo como anyname.reg. Edítelo con sus programas o documentos.

En las rutas, use \ para separar los nombres de las carpetas en las rutas clave, ya que regedit usa una sola \ para separar sus nombres clave. Todos los archivos de registro comienzan con REGEDIT4. Un punto y coma convierte una línea en un comentario. El símbolo @ significa asignar el valor a la clave en lugar de un valor con nombre.

El archivo no tiene que existir. Esto se puede usar para configurar Word.exe para abrir Winword.exe.

Escribir start batchfilecomenzará iexplore.exe.

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension> 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Batchfile.exe]

;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""

;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

;Informs the shell that the program accepts URLs.

;"useURL"="1"

;Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"

Ya te han dicho sobre el camino en otra respuesta. Consulte también las doskey /?macros cmd (solo funcionan al escribir).

Puede ejecutar comandos de inicio para CMD. Desde la referencia técnica del kit de recursos de Windows

AutoRun

HKCU\Software\Microsoft\Command Processor 

Data type Range Default value 
REG_SZ  list of commands  There is no default value for this entry.  

Descripción

Contiene comandos que se ejecutan cada vez que inicia Cmd.exe.



1

Si ejecuta el comando cmd, actualizará todas las variables del sistema para esa ventana de comando.


En un sentido. Lo que sucede es que comienzas una nueva sesión dentro de la sesión actual. Salir requerirá que llame exitdos veces, primero para cerrar la nueva y luego para cerrar la primera sesión (con el entorno anterior).
Farway

1

usar empanadas de gtools

hace las cosas de forma intuitiva, por ejemplo:

pathed /REMOVE "c:\my\folder"
pathed /APPEND "c:\my\folder"

¡y muestra resultados sin la necesidad de generar un nuevo cmd !


0
  1. He instalado PHP esa vez. Extraído php-7 ***. Zip en C: \ php \
  2. Copia de seguridad de mi variable de entorno PATH actual: ejecutar cmdy ejecutar comando:path >C:\path-backup.txt

  3. Obtener mi valor de ruta actual en el archivo C: \ path.txt (de la misma manera)

  4. Modifique path.txt (claro, la longitud de mi ruta es más de 1024 caracteres, Windows se está ejecutando unos años)
    • He eliminado rutas duplicadas allí, como 'C: \ Windows; o C: \ Windows \ System32; o C: \ Windows \ System32 \ Wbem; - Tengo dos veces.
    • Elimine las rutas de programas desinstalados también. Ejemplo: C: \ Archivos de programa \ NonExistSoftware;
    • De esta manera, mi longitud de cadena de ruta <1024 :)))
    • al final de la ruta, agregue la cadena; C: \ php \
    • ¡Copie el valor de la ruta solo en el búfer con comillas dobles enmarcadas! Ejemplo: "C: \ Windows; ****; C: \ php \" No PATH = debería estar allí !!!
  5. Abra Windows PowerShell como administrador.
  6. Ejecutar comando:

setx path "Here you should insert string from buffer (new path value)"

  1. Vuelva a ejecutar su terminal (uso "Far manager") y verifique: php -v

0

Por trivial que sea, tuve que reiniciar Windows cuando me enfrenté a este problema.

Estoy ejecutando Windows 7 x64. Hice una actualización manual de la variable PATH del sistema. Esto funcionó bien si ejecuto cmd.exe desde el menú de estadísticas. Pero si escribo "cmd" en la barra de direcciones del Explorador de Windows, parece cargar la RUTA desde otro lugar, que no tenía mis cambios manuales.

(Para evitar dudas, sí, cerré y volví a ejecutar cmd un par de veces antes de reiniciar y no ayudó).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.