Saltar al contenido

¿A dónde vuelve GOTO: EOF?

Solución:

:EOF es una etiqueta predefinida como explica Microsoft en la documentación del comando GOTO. La salida de ayuda ejecutándose en una ventana de símbolo del sistema goto /? explica también esta etiqueta especial para Fin del documento. Pero esta etiqueta predefinida solo es compatible con las extensiones de comando habilitadas de forma predeterminada.

La salida de ayuda ejecutándose en una ventana de símbolo del sistema call /? y, por supuesto, también la documentación para el comando CALL explica tanto que goto :EOF debe usarse para salir de una subrutina llamada con call :Label.

Una subrutina no es más que otro archivo por lotes incrustado dentro del archivo por lotes actual llamado con el comando call. Si la subrutina está al final del archivo por lotes, el final real del archivo marca el final de la subrutina.

Pero puede haber varias subrutinas en un archivo por lotes.

Por lo tanto, se necesita un comando para que el intérprete de comandos salga de la subrutina al llegar a una línea específica en el procesamiento de comandos y vuelva a la línea de comando que llama. goto :EOF al igual que exit /B se pueden usar en todas partes para salir de una subrutina o salir del procesamiento de archivos por lotes actual.

En el código de lote en cuestión, el primero goto :EOF es necesario para salir del archivo por lotes procesamiento sin una caída no deseada a través del código de subrutina después de terminar el ciclo.

los segundo goto :EOF en el código de lote del interrogador es para salir de la subrutina y continuar procesando en POR bucle en la segunda línea. No sale del procesamiento del archivo por lotes, solo sale del procesamiento de la subrutina.

Nota 1: goto EOF sin dos puntos requiere que realmente haya una línea que comience con :EOF en el archivo por lotes, es decir, la etiqueta de salto EOF debe existir en el archivo. goto :EOF siempre da como resultado la salida del procesamiento por lotes / subrutinas con las extensiones de comando habilitadas incluso si hay una etiqueta EOF en el archivo por lotes debido a una línea que comienza con :EOF.

Nota 2: Comando SALIR sin parámetro /B resulta siempre en salir de todo el proceso de comando independientemente de la jerarquía de llamadas e independiente de cómo se inició el procesador de comandos de Windows, con parámetro /K para guardar cmd.exe ejecutando como se usa al abrir una ventana del símbolo del sistema o con /C para cerrar una vez finalizado el procesamiento del comando, como se usa al hacer doble clic en un archivo por lotes. Por lo tanto exit sin /B debe usarse con prudencia en un archivo por lotes (mejor: nunca).

Nota 3: exit /B no funciona con las extensiones de comando deshabilitadas como lo demuestra este código:

@echo off
setlocal DisableExtensions
echo Use command exit /B with command extensions disabled.
exit /B

La ejecución de este archivo por lotes desde una ventana del símbolo del sistema da como resultado la salida del mensaje de error:

El sistema no puede encontrar la etiqueta de lote especificada – EOF

En otras palabras exit /B sin un código de salida adicional es exactamente como goto :EOF y depende, por tanto, también de las extensiones de comando. exit sin /B sin o con un código de salida funciona siempre.

Nota 4: ERRORLEVEL no se ve afectado por goto :EOF, pero la documentación de Microsoft GOTO está muda sobre este tema. exit /B # conjuntos ERRORLEVEL para # según lo documentado por Microsoft. exit /B # también se puede utilizar en lugar de goto :EOF para salir de una subrutina con un código de salida específico evaluado en la línea de comando llamando a la subrutina como en el uso de los operadores && o || o en el siguiente comando después de llamar a la línea de comando con if errorlevel X. Sin embargo, normalmente no es necesario salir explícitamente de un archivo por lotes o una subrutina con un código de salida específico, ya que tampoco goto :EOF ni exit /B modificar el valor actual de ERRORLEVEL.

Para obtener detalles sobre ERRORLEVEL comportamiento ver:

  • ¿Cuáles son los valores de ERRORLEVEL establecidos por los comandos internos de cmd.exe?
  • ¿Qué comandos internos de cmd.exe borran ERRORLEVEL a 0 después de tener éxito?
  • Línea única con múltiples comandos usando archivo por lotes de Windows

GOTO :EOF es funcionalmente equivalente para exit /B, pero ambos formularios solo funcionan cuando las extensiones están habilitadas. La prueba para este punto es muy simple:

setlocal DisableExtensions
goto :EOF

Compare el código anterior con este:

setlocal DisableExtensions
exit /B

Esto significa que GOTO :EOF vuelve a el mismo punto dónde exit /B volvería.

: eof medio “Fin del documento“. Se utiliza para hacer que el script finalice sin ejecutar ninguno de los siguientes comandos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *