setlocal, endlocal
Si desea utilizar variables en el símbolo del sistema o en archivos por lotes, puede especificar el comando set
para asignar un valor a un nombre de variable específico.
Sin embargo, si usa el comando set
tal como está, la variable se tratará como una variable global.
Después de que se completa la ejecución del archivo por lotes, la variable permanece, por lo que si se usa el mismo nombre de variable en otros archivos por lotes o en el símbolo del sistema, pueden ocurrir resultados inesperados.
Para evitar que esto suceda, puede limitar el alcance de las variables utilizando los comandos setlocal
y endlocal
.
Cómo usar los comandos setlocal, endlocal
Si no se usan setlocal, endlocal
Como ejemplo, cree dos archivos por lotes, caller.cmd y callee.cmd, de la siguiente manera.
@echo off
set VAR=Hello
call callee.cmd
@echo off
echo %VAR%
Al ejecutar el archivo caller.cmd anterior, se ejecuta callee.cmd, y dentro de callee.cmd se ejecuta echo %VAR%
.
Como no se utilizan setlocal
y endlocal
, la variable definida VAR
se trata como una variable global.
Por lo tanto, se puede acceder a ella desde callee.cmd, y se imprime la cadena Hello
.
Uso de setlocal y endlocal
A continuación, modificaremos los archivos caller.cmd y callee.cmd creados anteriormente de la siguiente manera.
@echo off
setlocal
set VAR=Hello
endlocal
call callee.cmd
@echo off
echo %VAR%
caller.cmd debe incluir setlocal
y endlocal
, mientras que callee.cmd no tiene cambios.
Al ejecutar el caller.cmd anterior, se ejecuta callee.cmd, y dentro de callee.cmd se ejecuta echo %VAR%
.
Sin embargo, debido al uso de setlocal
y endlocal
, al ejecutar echo %VAR%
dentro de callee.cmd, la variable VAR
no existe, por lo que no se produce ninguna salida.
Al ejecutarlo, el resultado es el siguiente:
De esta manera, el uso de setlocal
y endlocal
permite limitar el alcance de las variables.
Para evitar referencias no intencionadas a variables, se recomienda utilizar setlocal
y endlocal
al crear archivos de lote.