if - Ramificación condicional
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
)
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.
@echo off
setlocal
set /p ANSWER=¿Continuar? (S/N):
IF "%ANSWER%"=="S" (
echo Continuando el proceso.
) ELSE (
echo Proceso cancelado.
)
endlocal
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.
| Operador | Significado | Ejemplo |
|---|---|---|
EQU | Igual a | IF %A% EQU 10 |
NEQ | No igual a | IF %A% NEQ 0 |
LSS | Menor que | IF %A% LSS 100 |
LEQ | Menor o igual que | IF %A% LEQ 100 |
GTR | Mayor que | IF %A% GTR 0 |
GEQ | Mayor o igual que | IF %A% GEQ 1 |
Ejemplo
@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

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

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

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

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
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
@echo off
setlocal
IF EXIST "C:\Users\usuario\Documentos\informe.txt" (
echo Archivo encontrado.
) ELSE (
echo El archivo no existe.
)
endlocal
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
@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
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
)
IF ERRORLEVEL N es verdadero cuando ERRORLEVEL es N o mayor. Para comprobar un valor exacto, usa IF %ERRORLEVEL% EQU N.
Ejemplo
@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. UsaEQUpara comparar números. Operadores comoEQUfuncionan 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 consetdentro 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%==1da error de sintaxis si%A%está vacía. Usa comillas:IF "%A%"=="1". IF NOT ERRORLEVEL 1también trata como éxito los códigos de salida negativos.IF ERRORLEVEL 1significa “1 o mayor”, así que su negación es verdadera para 0 y para cualquier valor negativo. Para considerar éxito solo el 0, usaIF %ERRORLEVEL% EQU 0.
Resumen
Este artículo explicó cómo usar el comando IF.
| Tipo de condición | Sintaxis |
|---|---|
| Comparación de cadenas | IF "%A%"=="%B%" |
| Sin distinción de mayúsculas | IF /I "%A%"=="%B%" |
| Comparación numérica | IF %A% EQU %B% |
| Existe archivo | IF EXIST "ruta" |
| Variable definida | IF DEFINED nombrevar |
| Nivel de error | IF %ERRORLEVEL% EQU 0 |
| Negación | IF NOT condición |
Dominar el comando IF te dará mucha más flexibilidad y control sobre tus archivos por lotes.