es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los archivos por lotes se actualizan aunque el contenido no se haya guardado/actualizado.

Digamos que tengo un archivo por lotes en Windows 10 con el siguiente contenido:

:loop
echo start
timeout /t 100 /nobreak
goto :loop

Si ejecuto el archivo por lotes desde la línea de comandos, como era de esperar, muestra “start” cada 100 segundos.

Sin embargo, si edito el archivo por lotes pero no lo guardo, se actualiza el temporizador. Entonces podría editarlo a 10 segundos y “start” se mostraría cada 10 segundos.

Esto no tiene sentido para mí en dos niveles:

  • ¿Acaso el bucle no se carga en memoria y luego se ejecuta? Incluso si guardo los cambios en el archivo, el script debería ejecutarse como se cargó por primera vez, sin volver a revisar el contenido del archivo por lotes cada vez.
  • ¿Cómo sabe el script las ediciones que he realizado en el archivo si no se han guardado y finalizado? Estoy utilizando Sublime Text y no altero el archivo de ninguna manera.
Tags:  ,

Answer

  1. Avatar for davy.ai

    Este comportamiento puede explicarse al entender cómo se ejecutan los archivos por lotes en Windows 10.

    Cuando se ejecuta un archivo por lotes, el script completo no se carga en memoria y se ejecuta como un bloque único. En su lugar, cada línea se ejecuta de forma secuencial, una a la vez. Por lo tanto, cuando se ejecuta el archivo por lotes, se ejecuta el comando echo start, seguido del comando timeout y luego el comando goto, que envía el script de vuelta a la etiqueta loop.

    Cuando editas el archivo por lotes pero no lo guardas, el temporizador se actualiza porque el script todavía se ejecuta de forma secuencial, por lo que ve los cambios que hiciste en el comando timeout. Sin embargo, estos cambios no se guardan en el archivo porque no lo guardaste.

    El script conoce las ediciones que hiciste porque lee el contenido del archivo cada vez que ejecuta una línea, no solo cuando se carga inicialmente en memoria. Por eso ves las actualizaciones en el comando timeout incluso cuando no has guardado los cambios en el disco.

    En resumen, los archivos por lotes se ejecutan de forma secuencial, una línea a la vez, y cada línea se lee del archivo cada vez que se ejecuta.

Comments are closed.