Símbolo del sistema: ¿cómo agregar una ruta establecida solo para la ejecución de ese archivo por lotes?

187

Básicamente, sé que puedo pasar por mi panel de control y modificar la variable de ruta. Pero, me pregunto si hay una manera de incluir la ruta temporal a través de la programación por lotes. De esa manera solo se usa durante la ejecución de ese archivo por lotes. No quiero que la gente entre y modifique sus variables de ruta solo para usar mi archivo por lotes.

Miguel
fuente

Respuestas:

318

Al igual que cualquier otra variable de entorno, con SET:

SET PATH=%PATH%;c:\whatever\else

Si desea tener un pequeño control de seguridad incorporado primero, verifique si la nueva ruta existe primero:

IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else

Si desea que sea local para ese archivo por lotes, use setlocal:

setlocal
set PATH=...
set OTHERTHING=...

@REM Rest of your script

Lea los documentos detenidamente para setlocal/ endlocal, y eche un vistazo a las otras referencias en ese sitio: las funciones también son bastante interesantes y la sintaxis es complicada.

La página de sintaxis debería ayudarlo a comenzar con los conceptos básicos.

Estera
fuente
3
Si agrega un setlocala su archivo por lotes, la ruta solo es visible en el archivo
jeb
¿Cómo se agrega "setlocal"? ¿Está eso en lugar de "SET"?
michael
@micheal: actualicé mi respuesta con enlaces. Lea algunos documentos / ejemplos / tutoriales sobre las secuencias de comandos de cmd: SETes realmente algo que debe saber y comprender antes de realizar cualquier secuencia de comandos.
Mat
2
Salvavidas ¡Necesitaba agregar un EV en un servidor que no podía reiniciarse y esto me permite hacer lo que necesito sin tener que programar un reinicio!
dav_i
8
Incluso sin SETLOCALeso, a lo sumo, solo será para esa sesión de símbolo del sistema individual: si está haciendo esto desde más de un archivo por lotes y está usando EXIT /B %N%, entonces SETLOCALbásicamente va a volcar sus cambios cuando salga el script. : - /
BrainSlugs83
21

Hay un detalle importante:

set PATH="C:\linutils;C:\wingit\bin;%PATH%"

no funciona, mientras

set PATH=C:\linutils;C:\wingit\bin;%PATH%

trabajos. La diferencia son las citas!

UPD también ve el comentario de venimus

18446744073709551615
fuente
3
de hecho, debería ser, de lo SET "PATH=...%PATH%"contrario, los espacios existentes en la ruta causarán errores o mal comportamiento. Ajustar comillas como esta no las incluirá, pero establecerá correctamente la variable. Lo mismo funciona para cualquier otra variable env.
venimus
20

Así es, pero no lo cambia permanentemente, pero solo para el símbolo del sistema actual, si desea cambiarlo permanentemente, debe usar, por ejemplo, esto:

setx ENV_VAR_NAME "DESIRED_PATH" /m

Esto lo cambiará permanentemente y sí, puede sobrescribirlo con otro script por lotes.

tonto
fuente
Tal vez /mnecesita ser después setx?
suzanshakya
Funciona igual para mí, pero este Win Batch Scripting es un asunto poco terminado de MS. En mi empresa donde tenemos todos los mismos ordenadores portátiles con un mismo sistema no es una escritura universal para la configuración de PATH y estamos manteniendo 2 ó 3 de ellos, así que lo que funciona para ti :)
dumbak
Gracias por la actualización. En Windows Server 2012, cuando puse /mal final, DESIRED_PATHse agregó con / m al final solo para el usuario actual.
suzanshakya
11
Una palabra de precaución. Usando setx en una ruta, tratando de agregarle más, y la cadena es> 1024 de largo, descubrí que el resultado (mi RUTA del entorno) se truncó permanentemente. (Una cosa buena que tuve fue copiar el% PATH% que había ECHO antes del cambio, y volver a colocarlo usando la herramienta de ventanas de variables de entorno).
Andreas Jansson
¡Atención! ¡Este comando sobrescribe directamente la variable de entorno del sistema! Los eliminé e intenté arreglarlos. Y también para cualquiera que haya cometido este error: no reinicie su computadora. Escriba echo %path%y obtendrá la ruta actual cargada. Debe distinguir las variables de entorno Usuario y Sistema entre sí. Luego puede aplicarlos manualmente en el lugar correcto.
Alper