2011-08-17 13 views
6

Tengo un archivo por lotes que modifica la variable PATH anteponiendo algunas direcciones. Cuando el usuario cierra la sesión off-then-on, PATH se restablece a su valor original (antes de que se ejecutara el archivo por lotes). Este comportamiento está bien.Windows CMD - Restablecer la variable de ruta desde el archivo por lotes?

Sin embargo, si el archivo por lotes se ejecuta más de una vez, se vuelven a anexar los mismos valores y termino con una variable PATH demasiado larga y redundante que simplemente se alarga después de cada ejecución del lote.

Me gustaría restablecer la variable a lo que sea cuando el usuario inicie sesión, antes de que se anexen los valores. Me imagino que la solución es escribir el valor original en un archivo temporal y leerlo de nuevo, pero ¿hay una mejor manera de hacerlo?

Respuesta

6

En lugar de escribir el valor original a un archivo temporal, se podría escribir a otra variable de entorno:

if not defined ORIGINAL-PATH set ORIGINAL-PATH=%PATH% 
set PATH=c:\extra\stuff;%ORIGINAL-PATH% 

pero sería mejor para comprobar explícitamente si la cadena que desea está en camino ya o no , como este:

echo %PATH% | findstr /c:"c:\extra\stuff;" > nul || set PATH=c:\extra\stuff;%PATH% 
+0

Esto es realmente lo que terminé haciendo. ¡Gracias! – Ben

+0

Esto tiene la ventaja adicional de que si arruinas las "cosas extra" ... puedes arreglarlo. Olvidé el "\" final cuando lo hice por primera vez. Gracias por el consejo simple pero efectivo! – granadaCoder

6

Ponga @SETLOCAL en la parte superior de su archivo por lotes.

Cualquier cambio realizado en el entorno se restaurará cuando se cierre el archivo por lotes. Para obtener más información, ejecute setlocal /? para obtener más información.

1

He estado buscando una solución durante mucho tiempo para un problema similar. Finalmente terminé usando el pathmgr.cmd la que me he descargado de:

http://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e

Para usarlo para limpiar la ruta del usuario, las siguientes opciones se pueden utilizar desde la línea de comandos:

pathmgr.cmd/clean/user/p/y

Muchas otras opciones útiles también están disponibles.

Cuestiones relacionadas