Agregar a la variable PATH del sistema sin incluir la variable PATH del usuario

Agregar a la variable PATH del sistema sin incluir la variable PATH del usuario

Imagine las siguientes variables de entorno:

SistemaRUTA = C:\Windows
BobUsuarioRUTA =C:\Users\Bob

En un símbolo del sistema, el PATHcomando devuelveC:\Windows;C:\Users\Bob

despues de corrersetx /m PATH "C:\Node;%PATH%"
SistemaRUTA =C:\Node;C:\Windows;C:\Users\Bob

En un nuevo símbolo del sistema, el PATHcomando regresaC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Bob

Otro usuario, Alice, inicia sesión.
Alice'sUsuarioRUTA =C:\Users\Alice

En un símbolo del sistema, el PATHcomando regresaC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice

Bob tiene una ruta duplicada en su PATHvariable y Alice tiene las rutas de Bob en su PATHvariable.

¿Hay alguna manera de agregarlo al sistema PATHsin contaminarlo con el del usuario actual PATH?

Respuesta1

En Windows 7, puede buscar la ruta del sistema con

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

Si eso todavía funciona en Windows 8, úselo para crear el nuevo valor.

Tendrás que descubrir cómo analizar la salida de reg query. Aquí hay algo que podría funcionar:

para /f "tokens=1,2*" %a in (' reg query "HKLM\…\Environment" /v path ') establezca currentValue=%c

dónde

  • la cadena es el comando (indicado anteriormente) entre comillas simples.'reg query "HKLM\…\Environment" /v path'reg query
  • a, currentValuey cson nombres de variables. Puede elegir los nombres de variable que desee, con la restricción de que ay cdeben ser letras simples, con dos letras separadas (por ejemplo, puede usar ny po xy z).
  •                             for /f "options" %variable in ('command1') do command2
    ejecuta , analiza la salida, asigna valores a los (s) ( , arriba; pero ver también a continuación) y ejecuta .command1%variable%acommand2
  • tokens=1,2*significa que %aobtiene el primer token (palabra) de cada línea (restante), %bobtiene la segunda palabra y %cobtiene el resto de la línea.

    • La primera palabra es path(el nombre del valor).
    • La segunda palabra es REG_EXPAND_SZ(el tipo de valor).
    • El resto de la línea es el valor.

    (Podrías usar tokens=2*y luego currentValue=%b).

Entonces, después de ejecutar lo anterior, deberías poder hacer

setx PATH "C:\Node;%currentValue%" /m
  • Si haces esto en un script (un .BATarchivo), usa %%ay %%c.
  • Asegúrese de probar esto con echocomandos antes de hacerlo con setx.

Respuesta2

No coloque la ruta específica de Bob en el valor de Ruta del sistema que utilizan todos.

Lea el valor anterior de la ruta del sistema, modifíquelo y establezca el nuevo valor. Si cmd.exe(aparentemente el setcomando puede crear/modificar/eliminar pero no leer) no proporciona esas funciones, colóquelo en un programa llamado por el archivo por lotes.

El valor de la ruta del sistema se encuentra (y cambia) a través del Registro. Simplemente busco el valor que sé que tiene para descubrir exactamente dónde, y busco en Google esa ruta clave para comprobar lo que se ha dicho al respecto.
(más tarde: son HKLM\System\CurrentControlSet\Control\Session Manager\Environmenty HKCU\Environment)

Cualquier lenguaje de scripting más avanzado para Windows, o con soporte API de Windows, puede manejar eso. O bien, un programa compilado ejecutable en el idioma que elija.

La carcasa de repuesto CMDTomar el mandotiene una función @REGQUERY:

echo %@REGQUERY["HKLM_64\System\CurrentControlSet\Control\Session Manager\Environment\Path"]

Como parece que tienes una máquina específica en mente, puedes instalarTCC/LE (gratis)y utilícelo para interpretar su archivo por lotes.

información relacionada