Cómo restringir el cambio de la variable env localmente por archivo por lotes


0
  • Tengo dos archivos por lotes x.bat y y.bat.
  • Estoy llamando a y.bat desde x.bat.
  • El archivo y.bat establece una variable env como: establecer ABC =
  • La restricción es que no puedo cambiar este archivo Y.bat pero quiero que mi variable "ABC" se establezca como otra cosa.
  • ¿Cómo puedo configurar "ABC" en X.bat para que no se anule con un comando de conjunto de archivos.bat?

Respuestas:


0

En su archivo por lotes, establezca ABC en otra var. Puede hacerlo de la siguiente manera:

set DEF=%ABC%

un ejemplo:

set ABC=testing
set DEF=%ABC%
set ABC=changed

echo %ABC%
:: prints: changed

echo %DEF%
:: prints: testing

No quiero que se cambie el nombre de la variable, ya que tiene dependencias en lugar de eso, no quiero que se lea el comando set en Y.bat sin hacer ningún cambio en el archivo Y.bat.
RISHABH RASTOGI

Eso no es posible.
LPChip

Por supuesto, puede restablecer la var después de ejecutarla. Pero no puede obligar a X.bat a usar el valor que especifique en Y.bat si X.bat modifica ese valor.
LPChip

0

No se puede evitar y.bat De cambiar el valor en la variable. Las variables de entorno no pueden definirse como constantes ni marcarse como de solo lectura o protegido contra escritura. Si el archivo por lotes llamado cambia la variable y no puede cambiar el archivo por lotes, no puede evitar el cambio.

Lo único que puede evitar es la propagación de los cambios en la variable para afectar la x.bat

x.bat

@echo off

    set "abc=set from x.bat"

    setlocal
    call y.bat
    endlocal

    echo %abc%

y.bat

@echo off
    set "abc=changed value"

setlocal genera una copia del espacio de entorno y establece esta copia como activa. Todos los cambios se realizan en esta copia hasta la próxima. endlocal que descarta la copia, y restaura el entorno anterior.

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.