Establecer o modificar una variable de entorno (en todo el sistema) en cmd.exe

13

Estoy buscando una manera conveniente de agregar y / o modificar y / o eliminar una variable de entorno desde la línea de comandos. Particularmente, a veces me encuentro en situaciones en las que tengo que agregar algunas variables en cmd.exe.

Estaría agradecido si alguien me mostrara una forma no GUI para modificar (es decir: agregar un nuevo directorio) la %PATH%variable.

El cambio debe ser permanente, no solo por la duración de la cmdsesión.

René Nyffenegger
fuente
1
Creo que uno de los problemas que encontrará es que la mayoría de los cambios en los permanentes , de todo el sistema de variables de entorno requieren un cierre de sesión / usuario (o reiniciar) para la sesión del usuario para utilizar los valores modificados.
quack quijote

Respuestas:

8

El método de la vieja escuela de manipular directamente las variables de registro con el comando reg estaba en el dinero. Así es como lo haces:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

Tíralo en un script de una línea llamado apath.bat que se ve así:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

Luego, todo lo que necesita proporcionar es la ruta del nuevo directorio que está agregando al llamar al script y está marcado:

por ejemplo: apath.bat% addonpath%

Aunque Hinch tiene razón. La mejor manera de hacerlo si está usando Vista o superior es usar el comando SETX que está diseñado para permitirnos propagar variables de entorno sin el riesgo de manipular directamente el registro con el comando reg que podría salvar su máquina si manipulas las variables ENV lo suficiente como para usarlo sobre la marcha.

usuario51259
fuente
¿Este comando requiere un reinicio?
Juzer Ali
No, pero debe usar un nuevo proceso (cmd).
Mike
1
Para mí, ¿necesita reiniciar? ¿por qué? Estoy en Windows XP, sp3.
Changwang Zhang
15

Podrías usar setx.

Variable de usuario:

SETX PATH "%PATH%;C:\MyDir"

Variable del sistema:

SETX PATH "%PATH%;C:\MyDir" /M
Garfio
fuente
Creo que SETX está disponible desde Vista, pero estoy en XP.
René Nyffenegger el
es posible que pueda salirse con la copia de setx.exe de una máquina con Vista. probablemente no funcionará, pero podría funcionar.
quack quijote
2
SETX es parte de las Herramientas de recursos para Windows Server 2003. Puede agregarlo a su directorio system32 o cualquier otro agregado a su ruta (¡huevo de gallina!).
Paradroid
Necesito la parte / M para poder modificar la variable del sistema, no la del usuario. ¡Gracias!
Andrei Sfat
Ambos comandos especificados son incorrectos. ¿Por qué? Windows en realidad mantiene dos valores de RUTA: en todo el sistema y por usuario. Cuando escribes echo %PATH%, los ves combinados, como <system path>;<user path>. Por lo tanto, el primer comando forzará que los elementos actuales de la ruta del sistema aparezcan en la ruta del usuario (que no es tan malo), mientras que el segundo comando hará que los elementos actuales de la ruta del usuario aparezcan en la ruta del sistema (lo cual es inaceptable).
Sasha
1

Puede usar la HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunclave de registro para apuntar a un archivo por lotes, para permitirle hacer cambios semipermanentes sin profundizar en los diálogos de configuración arcana.

Phoshi
fuente
Hasta donde sé, eso solo influiría en las invocaciones posteriores de cmd.exe (sin el indicador / d), pero no en todo el sistema u otros procesos (posteriormente invocados).
René Nyffenegger el
Eso es correcto. Considero que una ventaja significa que puede hacer más sin preocuparse por los diferentes procesos que no saben qué hacer. Sin embargo, funcionará en cualquier mensaje interactivo, lo que siempre es bueno: P
Phoshi
1

Si no desea usar la GUI (como en Panel de control, Sistema, Avanzado, Variables de entorno, RUTA), probablemente pueda usar REGpara configurar HKCU\Environment\PATH.

  • actualizar %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

Las /ffuerzas de sobreescritura del valor existente, de modo que no tienen que responder a la pregunta de forma interactiva.

Editar: %PATH% necesita ser citado.

Editar: También vale la pena señalar que esto probablemente requiere un reinicio o reinicio de sesión antes de que surta efecto. Si bien cambiarlo en la GUI surte efecto inmediatamente (para nuevas cmd.exesesiones).

Referencia: http://support.microsoft.com/kb/104011

Como se señaló en la referencia, si desea escribir algún código, puede enviar WM_SETTINGCHANGE y eso debería evitar el requisito de inicio / cierre de sesión.

opello
fuente
Eso sería muy útil. Pero, si consulto sobre esa variable, no devuelve nada.
PA.
Hrm. En XP Pro SP3 Inglés puedo obtener mi camino con: REG QUERY HKCU\Environment /v PATH.
opello el
es una ruta específica del usuario, no la ruta de todo el sistema. No estoy seguro de dónde vive ese. se pueden configurar en la misma cosa pero generalmente contienen elementos separados (y su ruta de trabajo es una fusión de los dos).
quack quijote
Correcto, está en HKCU. El artículo de Microsoft KB vinculado tiene ambas ubicaciones de registro.
opello el
1
Esto es casi lo que estoy buscando ... si hubiera una manera de enviar también el WM_SETTINGCHANGE desde cmd.exe.
René Nyffenegger
0

Es fácil cambiar la ruta en el proceso actual de cmd.exe:

PATH c:\MyNewDirectory;%PATH%

Siempre puede hacer HELP PATH para obtener ayuda sobre el comando PATH.

jdigital
fuente
1
¿No es esto solo bueno para la sesión?
JL.
Sí, esto no persiste en las sesiones.
John T
JL tiene razón y estaba buscando una solución permanente. He editado mi pregunta en consecuencia.
René Nyffenegger el
0

Para cambios verdaderamente permanentes en todo el sistema, realmente desea utilizar el panel de control del sistema (también conocido como Mi PC -> Propiedades -> Avanzado -> Variables de entorno, para WinXP). La configuración allí afecta a todo el sistema, incluidos los programas GUI en el shell de Explorer.

Si solo necesita estos cambios en el cmd.exeshell, puede ejecutar un archivo por lotes que los establece cada vez que inicia una ventana cmd.exe. La respuesta de Phoshi menciona la HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, que parece una excelente opción: es fácil realizar pequeños cambios y volver a ejecutar desde la línea de comandos si es necesario. Pero esto no afectará a las ventanas GUI o al shell del Explorer.

De hecho, me sorprende que Sysinternals no tenga una utilidad capaz de hacer esto. ¿Quizás otro de los PStools pueda hacerlo?

quijote curandero
fuente
0

Muchas formas de hacer esto. REG ADD es uno, o REG IMPORT (usando un archivo .REG exportado desde otra computadora). SETX / M es otro. También puede eliminarlo utilizando las Preferencias de directiva de grupo (la forma más fácil para grandes cantidades de computadoras)

Skatterbrainz
fuente
0

Otro pensamiento no mencionado aquí, crea un script de autohotkey que abrirá el panel de control y lo ingresará por ti. Funciona bien si ya eres usuario de AHK :-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

Además, ¿qué pasa con la edición de hklm / system / currentcontrolset001 / control / session manager / environment: clave de ruta? Pero la misma clave está bajo hklm / system / currentcontrolset002 y hklm / system / currentcontrolset. Parece que esto podría ser correcto, aquí: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

Justin Goldberg
fuente