Digamos que eu tenha dois arquivos em lote, foo.bat
e bar.bat
, localizados assim:
root\foo.bat
root\grub\bar.bat
Digamos também que ambos os arquivos contenham uma linha que define uma variável, assim:
set PWD=%cd%
Agora, se foo.bat
chamar .\grub\bar.bat
, bar.bat
substituirá a PWD
variável definida em foo.bat
?
Responder1
Eu fiz um experimento. Alterar a variável de ambiente bar.bat
faz com que ela mude em foo.bat
. Suponho que isso era esperado porque as variáveis de ambiente definidas usando o set
comando (não setx
) têm como escopo a sessão de comando.
Responder2
o escopo é global/a variável é compartilhada como você diz... então, para repetir, sim.
além disso, se você usar setx, ele funcionará para a próxima sessão cmd e futuras porque está no registro., mas set e setx não devem ser comparados na discussão do escopo. variáveis de ambiente são geralmente globais. Mas você pode usar setlocal em um arquivo em lote no início e as variáveis definidas 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>