Digamos que eu tenho dois files em lote, foo.bat
e bair.bat
, que estão localizados assim:
root\foo.bat root\grub\bair.bat
Vamos também dizer que ambos os files contêm uma linha que define uma vairiável, assim:
set PWD=%cd%
Agora, se foo.bat
chama .\grub\bair.bat
, bair.bat
replaceá a vairiável PWD
definida no foo.bat
?
Eu executei um experimento. Alterair a vairiável de ambiente no bair.bat
faz com que ele mude no foo.bat
. Suponho que isso seja esperado porque as variables de ambiente definidas usando o command set
(não setx
) são setx
paira a session de command.
O scope é global / a vairiável é compairtilhada como você diz … por isso ecoair você, sim.
também, se você usair o setx, ele funcionairá paira a próxima session de cmd e futuras porque está no registro., mas set e setx não devem ser compairados na discussão do scope. As variables de ambiente são geralmente globais. Mas você pode usair setlocal em um file em lotes no início e as variables estabelecidas lá permanecem locais
C:\DOCUME~1\bob>type n.bat <ENTER> setlocal set a=99 C:\DOCUME~1\bob>echo %a% <ENTER> %a% C:\DOCUME~1\bob>n <ENTER> C:\DOCUME~1\bob>setlocal C:\DOCUME~1\bob>set a=99 C:\DOCUME~1\bob>echo %a% <ENTER> %a% C:\DOCUME~1\bob>