¿Por qué descargar variables en archivos por lotes de Windows?

13

¿Se considera necesario o una buena práctica descargar las variables utilizadas en los archivos por lotes de Windows?
Por ejemplo, en el siguiente código, ¿es set myFolder=necesario al final?

@echo off
set myFolder="C:\Temp\Batchfiles"
echo %myFolder%

set myFolder=

He visto esto en varios lugares en línea, ¿seguramente las variables se descargan automáticamente cuando finaliza el archivo por lotes?

ChrisB
fuente

Respuestas:

32

SETestablecerá una variable de entorno global. Persistirá después de la ejecución de su script.

Echemos un vistazo a un ejemplo.
Primero, borro la variable para asegurarme de que no existe.

C:\Users\Oliver\Desktop>set TEST=

Una prueba rápida:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

Vamos a crear ese archivo por lotes y ejecutarlo:

C:\Users\Oliver\Desktop>echo set TEST=something>test.bat
C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>set TEST=something

Veamos el valor de TEST después de la ejecución de mi .batarchivo:

C:\Users\Oliver\Desktop>echo %TEST%
something

Entonces, sí, borrar la variable al final del script es una buena práctica.


Aún mejor sería usar SETLOCALy ENDLOCALevitar todo el problema.

Aquí, creé un nuevo .batarchivo que usa SETLOCALy ENDLOCAL:

C:\Users\Oliver\Desktop>type test.bat
setlocal
set TEST=something
endlocal

Vamos a borrarlo TESTy repetirlo para asegurarnos de que comencemos limpio:

C:\Users\Oliver\Desktop>set TEST=
C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

Genial, ahora vamos a ejecutar el nuevo .bat:

C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>setlocal
C:\Users\Oliver\Desktop>set TEST=something    
C:\Users\Oliver\Desktop>endlocal

Ahora TESTtodavía estará vacío:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
Der Hochstapler
fuente
2
+! para la aclaración
Raystafarian
1
Gran ejemplo y explicación - gracias
ChrisB