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.