goto - Saltar a una etiqueta

Mantenido el

Al crear archivos por lotes, a menudo se quiere omitir una parte del proceso cuando se cumple una condición, o saltar a un tratamiento de errores cuando algo falla.

El comando goto permite controlar el flujo de esta manera.

Este artículo explica el comando goto, desde lo básico hasta las subrutinas, con código de ejemplo.

Sintaxis básica de goto

El comando goto salta a la posición de la etiqueta indicada.

GOTO nombre_de_etiqueta

Una etiqueta se define como una línea que empieza con dos puntos :.

:nombre_de_etiqueta

Ejemplo básico

@echo off
setlocal

echo Ejecutando el paso 1.
GOTO SKIP
echo Esta línea se omite.
:SKIP
echo Ejecutando el paso 2.

endlocal
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>goto_basic.cmd
Ejecutando el paso 1.
Ejecutando el paso 2.
C:\users\user>

GOTO SKIP salta a la etiqueta :SKIP, por lo que el echo intermedio no se ejecuta.

Sobre los nombres de etiqueta

Los nombres de etiqueta no distinguen entre mayúsculas y minúsculas. :SKIP, :skip y :Skip se tratan como la misma etiqueta.

Combinar goto con condiciones

El comando goto suele combinarse con el comando if para cambiar el flujo según una condición.

@echo off
setlocal

copy "important.txt" "backup\important.txt" >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ERROR

echo La copia de seguridad se completó.
GOTO END

:ERROR
echo Error: la copia de seguridad falló.

:END
endlocal
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>error_handling.cmd
Error: la copia de seguridad falló.
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

Si la copia falla, se salta a :ERROR; si tiene éxito, se salta a :END.

Terminar un archivo por lotes con GOTO :EOF

GOTO :EOF salta al final del archivo por lotes y termina su ejecución.

@echo off
setlocal

IF NOT EXIST "config.ini" (
    echo Error: no se encontró config.ini.
    GOTO :EOF
)

echo Se cargó el archivo de configuración.
rem Procesamiento posterior...

endlocal
チェック

:EOF es una etiqueta especial que no hace falta definir. Está disponible cuando las extensiones de comandos están habilitadas (el valor predeterminado de Windows).

Implementar un menú

Con goto se puede crear un menú que ejecuta distintos procesos según la elección del usuario.

@echo off
setlocal

:MENU
echo.
echo ========== Menú ==========
echo 1. Mostrar archivos
echo 2. Mostrar uso del disco
echo 3. Salir
echo ==========================
set "CHOICE="
set /p CHOICE=Introduce un número:

IF "%CHOICE%"=="1" GOTO LIST
IF "%CHOICE%"=="2" GOTO DISK
IF "%CHOICE%"=="3" GOTO END
echo Entrada no válida.
GOTO MENU

:LIST
dir /b
GOTO MENU

:DISK
powershell -NoProfile -Command "Get-PSDrive -PSProvider FileSystem"
GOTO MENU

:END
echo Saliendo del programa.
endlocal

El menú se muestra repetidamente hasta que el usuario introduce “3”.

Si el usuario solo pulsa Intro, set /p no modifica la variable y se conserva el valor anterior. Por eso la variable se vacía con set "CHOICE=" antes de la entrada.

Sobre wmic

wmic se usaba habitualmente para obtener información de discos, pero está obsoleto y ya no se instala de forma predeterminada en las versiones recientes de Windows 11. Este ejemplo usa PowerShell.

Usarlo como subrutina (CALL :etiqueta)

goto no vuelve tras saltar, pero CALL :etiqueta ejecuta una etiqueta como subrutina (similar a una función) y regresa a la posición original después.

@echo off
setlocal

echo Iniciando el proceso principal.

CALL :GREET "Taro"
CALL :GREET "Hanako"

echo Proceso principal finalizado.
GOTO :EOF

:GREET
echo Hola, %~1.
EXIT /B
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>subroutine.cmd
Iniciando el proceso principal.
Hola, Taro.
Hola, Hanako.
Proceso principal finalizado.
C:\users\user>
Finalizar una subrutina

Una subrutina debe terminar con EXIT /B o GOTO :EOF. De lo contrario, la ejecución continúa por las subrutinas e instrucciones siguientes.

Implementar un bucle con goto

Se puede escribir un bucle con contador usando solo una etiqueta y goto, sin el comando for.

@echo off
setlocal

set /a COUNT=1

:LOOP
IF %COUNT% GTR 3 GOTO :EOF
echo Iteración %COUNT%.
set /a COUNT+=1
GOTO LOOP
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>loop.cmd
Iteración 1.
Iteración 2.
Iteración 3.
C:\users\user>

Errores habituales y soluciones

«El sistema no encuentra la etiqueta de lote especificada»

Este mensaje aparece cuando la etiqueta indicada en GOTO no existe en el archivo por lotes. Comprueba lo siguiente:

  • El nombre de la etiqueta está escrito igual en ambos sitios (en GOTO no se escriben los dos puntos; solo en la definición)
  • La línea de la etiqueta empieza con dos puntos
  • La etiqueta de destino está definida fuera, y no dentro, de un bloque entre paréntesis ( )

Precauciones al usar goto

Evita el uso excesivo

Abusar de goto complica el flujo y produce el llamado «código espagueti». Siempre que sea posible, considera sustituirlo por if/else o por subrutinas con CALL :etiqueta.

Cuidado dentro de bucles

Usar goto dentro de un bucle for o de un bloque entre paréntesis ( ) interrumpe ese bucle o bloque. Si necesitas ramificar dentro de un bucle, usa una instrucción if.

Resumen

Este artículo explicó cómo usar el comando goto.

FinalidadSintaxis
Saltar a una etiquetaGOTO etiqueta
Terminar el archivoGOTO :EOF
Llamar a una subrutinaCALL :etiqueta
Volver de una subrutinaEXIT /B

Artículos relacionados

Pregunta de práctica

Problema de práctica

Selecciona la afirmación incorrecta sobre el comando GOTO.

回答がサーバーに送信されることはありません
#Símbolo del sistema #Archivos por lotes #GOTO #Etiqueta #Comandos