if - Ramificación condicional

Mantenido el

Al crear archivos por lotes, las situaciones en las que necesitas “dividir el procesamiento según una condición” son muy frecuentes.

Por ejemplo: ejecutar una copia solo cuando existe un archivo, o continuar al siguiente paso solo si el comando anterior tuvo éxito.

El comando IF es el que hace posible esta ramificación condicional.

Este artículo explica el comando IF desde los conceptos básicos hasta el uso avanzado, con ejemplos de código prácticos.

Sintaxis básica del comando IF

La sintaxis básica del comando IF es la siguiente.

IF condición (
    rem Comandos a ejecutar cuando la condición es verdadera
)

Para también manejar el caso falso, añade una cláusula ELSE.

IF condición (
    rem Comandos para el caso verdadero
) ELSE (
    rem Comandos para el caso falso
)
Nota de sintaxis

ELSE debe escribirse en la misma línea que el paréntesis de cierre anterior ). Si se escribe ELSE en una nueva línea, no funcionará correctamente.

Comparar cadenas de texto

Para comprobar si dos cadenas son iguales, usa el operador ==.

IF "%variable%"=="cadena a comparar" (
    rem Comandos cuando coinciden
)
チェック

Se recomienda encerrar los valores entre comillas dobles. Esto evita errores de sintaxis cuando una variable está vacía.

Ejemplo

Ramificación basada en la entrada del usuario.

string_compare.cmd
@echo off
setlocal

set /p ANSWER=¿Continuar? (S/N):

IF "%ANSWER%"=="S" (
    echo Continuando el proceso.
) ELSE (
    echo Proceso cancelado.
)

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>string_compare.cmd
¿Continuar? (S/N): S
Continuando el proceso.
C:\users\user>

Comparación sin distinción de mayúsculas

Usa la opción /I para comparar cadenas sin tener en cuenta las mayúsculas y minúsculas.

IF /I "%ANSWER%"=="s" (
    echo Continuando el proceso.
)

Con esto, tanto S como s coincidirán.

Comparar números

Para comparaciones numéricas, usa estos operadores dedicados.

OperadorSignificadoEjemplo
EQUIgual aIF %A% EQU 10
NEQNo igual aIF %A% NEQ 0
LSSMenor queIF %A% LSS 100
LEQMenor o igual queIF %A% LEQ 100
GTRMayor queIF %A% GTR 0
GEQMayor o igual queIF %A% GEQ 1

Ejemplo

number_compare.cmd
@echo off
setlocal

set /a NUM=75

IF %NUM% GEQ 80 (
    echo Aprobado con distinción
) ELSE IF %NUM% GEQ 60 (
    echo Aprobado
) ELSE (
    echo Reprobado
)

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>number_compare.cmd
Aprobado
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

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

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

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

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

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

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

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

Sobre ELSE IF encadenado

Como se muestra arriba, encadenar sentencias ELSE IF permite evaluar múltiples condiciones en orden. Solo se ejecuta el primer bloque cuya condición sea verdadera.

Comprobar si existe un archivo o carpeta

IF EXIST comprueba si existe un archivo o carpeta especificado.

IF EXIST "ruta" (
    rem Comandos si existe
)

Ejemplo

check_file.cmd
@echo off
setlocal

IF EXIST "C:\Users\usuario\Documentos\informe.txt" (
    echo Archivo encontrado.
) ELSE (
    echo El archivo no existe.
)

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>check_file.cmd
Archivo encontrado.
C:\users\user>

Comprobar la existencia de una carpeta

Para comprobar específicamente una carpeta, añade \ al final de la ruta. Con la barra final, la comprobación no coincide con un archivo del mismo nombre, así que solo se evalúan carpetas.

IF EXIST "C:\Users\usuario\Documentos\" (
    echo La carpeta existe.
)

Comprobar si una variable está definida

IF DEFINED comprueba si una variable ha sido configurada.

IF DEFINED nombrevariable (
    rem Comandos cuando la variable está definida
)

Ejemplo

check_defined.cmd
@echo off
setlocal

set MI_VAR=Hola

IF DEFINED MI_VAR (
    echo MI_VAR está definida: %MI_VAR%
) ELSE (
    echo MI_VAR no está definida.
)

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>check_defined.cmd
MI_VAR está definida: Hola
C:\users\user>

Comprobar ERRORLEVEL

Para verificar el código de salida del comando anterior, usa IF ERRORLEVEL o %ERRORLEVEL%.

IF ERRORLEVEL 1 (
    rem Comandos cuando el código de salida es 1 o mayor
)
Comportamiento de ERRORLEVEL

IF ERRORLEVEL N es verdadero cuando ERRORLEVEL es N o mayor. Para comprobar un valor exacto, usa IF %ERRORLEVEL% EQU N.

Ejemplo

check_error.cmd
@echo off
setlocal

copy "origen.txt" "destino.txt" >nul 2>&1

IF %ERRORLEVEL% EQU 0 (
    echo Copia exitosa.
) ELSE (
    echo Error al copiar. Código de error: %ERRORLEVEL%
)

endlocal

Negar una condición con NOT

NOT invierte la condición.

IF NOT EXIST "backup\" (
    mkdir backup
    echo Carpeta backup creada.
)

IF NOT "%USERNAME%"=="admin" (
    echo No eres administrador.
)

IF NOT DEFINED CONFIG_PATH (
    set CONFIG_PATH=C:\default\config.ini
)

Combinar múltiples condiciones

Los archivos por lotes no tienen operadores AND u OR, pero las sentencias IF anidadas logran el mismo resultado.

Condición AND (ambas condiciones deben cumplirse)

Si escribes varios IF seguidos en la misma línea, el comando se ejecuta solo cuando todas las condiciones son verdaderas.

IF EXIST "data.txt" IF "%MODE%"=="prod" (
    echo data.txt existe y MODE es prod.
)

Condición OR (se cumple al menos una)

Un método habitual es activar una variable indicadora cuando coincide alguna de las condiciones.

set MATCH=0
IF /I "%INPUT%"=="A" set MATCH=1
IF /I "%INPUT%"=="B" set MATCH=1
IF %MATCH% EQU 1 (
    echo Se introdujo A o B.
)

Errores comunes

  • == es una comparación de cadenas. Usa EQU para comparar números. Operadores como EQU funcionan dentro del rango de un entero de 32 bits con signo.
  • Las variables modificadas dentro de un bloque con paréntesis no se pueden leer con %. Una variable que defines con set dentro de () conserva el valor que tenía cuando se analizó todo el bloque. Usa !variable! con la expansión retardada.
  • Cuidado con los errores de sintaxis con variables vacías. IF %A%==1 da error de sintaxis si %A% está vacía. Usa comillas: IF "%A%"=="1".
  • IF NOT ERRORLEVEL 1 también trata como éxito los códigos de salida negativos. IF ERRORLEVEL 1 significa “1 o mayor”, así que su negación es verdadera para 0 y para cualquier valor negativo. Para considerar éxito solo el 0, usa IF %ERRORLEVEL% EQU 0.

Resumen

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

Tipo de condiciónSintaxis
Comparación de cadenasIF "%A%"=="%B%"
Sin distinción de mayúsculasIF /I "%A%"=="%B%"
Comparación numéricaIF %A% EQU %B%
Existe archivoIF EXIST "ruta"
Variable definidaIF DEFINED nombrevar
Nivel de errorIF %ERRORLEVEL% EQU 0
NegaciónIF NOT condición

Dominar el comando IF te dará mucha más flexibilidad y control sobre tus archivos por lotes.

Artículos relacionados

Preguntas de práctica

Problema de práctica

Elige la descripción incorrecta sobre el comando IF.

回答がサーバーに送信されることはありません
#Símbolo del sistema #Archivo por lotes #IF #Condicional #Comando