Nomes de variáveis ​​entre arquivos em lote chamados

Nomes de variáveis ​​entre arquivos em lote chamados

Digamos que eu tenha dois arquivos em lote, foo.bate 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.batchamar .\grub\bar.bat, bar.batsubstituirá a PWDvariável definida em foo.bat?

Responder1

Eu fiz um experimento. Alterar a variável de ambiente bar.batfaz com que ela mude em foo.bat. Suponho que isso era esperado porque as variáveis ​​de ambiente definidas usando o setcomando (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>

informação relacionada