Verificación de existencia de archivos

Mantenido el

Comprobar si un archivo o una carpeta existe es una forma habitual de verificar los requisitos previos en un archivo por lotes.

Añadir una comprobación antes de copiar o eliminar facilita encontrar la causa de los errores.

En resumen: usa if exist "ruta" para comprobar la existencia y if not exist "ruta" cuando la condición sea que el elemento no exista.

if exist "C:\work\sample.txt" echo Existe
if not exist "C:\work\sample.txt" echo No existe

Comando básico

El comando if exist

El Símbolo del sistema no tiene un comando dedicado solo a comprobar la existencia de un archivo. En su lugar se usa la sintaxis if exist.

Comprueba si el archivo o la carpeta indicados existen y, si es así, ejecuta un proceso.

Uso_basico_de_exist
if exist "ruta" (
  rem Proceso cuando el archivo existe
)
Encierra la ruta entre comillas dobles

Una ruta puede contener espacios, por lo que es más seguro escribir if exist "%file_path%" con comillas dobles.

El siguiente código comprueba si sample.txt existe en la carpeta Documentos del usuario.

Ejemplo_de_if_exist
set "file_path=%USERPROFILE%\Documents\sample.txt"

if exist "%file_path%" (
    echo El archivo existe.
) else (
    echo El archivo no existe.
)

El siguiente código guarda el resultado de la comprobación en una variable.

Guardar_el_resultado_en_una_variable
set "file_path=%USERPROFILE%\Documents\sample.txt"

if exist "%file_path%" (
    set file_exist=true
) else (
    set file_exist=false
)

if %file_exist%==true (
    echo El archivo existe.
) else (
    echo El archivo no existe.
)

Al guardar el resultado en una variable, puedes separar la comprobación del procesamiento posterior.

Escribe else en la misma línea que el paréntesis de cierre

Escribe siempre ) else ( en una sola línea. Un salto de línea entre ) y else provoca un error de sintaxis.

Comprobar carpetas y distinguirlas de los archivos

if exist sirve tanto para archivos como para carpetas. Si añades \ al final de la ruta, la comprobación solo es verdadera para una carpeta.

Comprobar_que_existe_una_carpeta
if exist "%USERPROFILE%\Documents\" (
    echo La carpeta Documents existe.
)

Y para confirmar que el elemento existe como archivo y no como una carpeta con el mismo nombre, combina ambas comprobaciones.

Confirmar_que_es_un_archivo
if exist "%file_path%" if not exist "%file_path%\" (
    echo Existe como archivo.
)
Crear la carpeta si no existe

if not exist "salida\" mkdir "salida" crea la carpeta de salida solo cuando aún no existe. Consulta

para más detalles.

Comprobar con comodines

Con * o ? puedes comprobar si existe al menos un archivo que coincida.

Comprobar_si_hay_archivos_de_registro
if exist "%USERPROFILE%\Documents\*.log" (
    echo Hay archivos de registro.
)

Cuando el archivo no existe (if not exist)

Usa if not exist para detener el proceso si falta un archivo, o para crearlo.

Crear_el_archivo_si_no_existe
if not exist "%file_path%" (
    type nul > "%file_path%"
)
Mostrar con echo una ruta con paréntesis

Si la ruta contiene ), como en C:\Program Files (x86), escribir echo %file_path% dentro de un bloque if (...) puede provocar un error de sintaxis. Encierra la ruta entre comillas, como en echo "%file_path%", o evita el bloque con paréntesis y escribe if exist ... goto.

Ejemplos prácticos

Uso en un archivo por lotes

El siguiente archivo por lotes ejecuta un proceso distinto según exista o no el archivo.

@echo off
setlocal

set "file_path=%USERPROFILE%\Documents\sample.txt"

if exist "%file_path%" (
    echo "%file_path%" existe.
    rem Proceso cuando el archivo existe
) else (
    echo "%file_path%" no existe.
    rem Proceso cuando el archivo no existe
)

pause
endlocal

Para más información sobre @echo off, consulta la siguiente página.

Validación

Cuando tu proceso da por hecho que ciertos archivos existen, valídalos primero.

El siguiente código comprueba dos archivos y continúa solo si ambos existen.

@echo off
setlocal

set "file1=%USERPROFILE%\Documents\file1.txt"
set "file2=%USERPROFILE%\Documents\file2.txt"

if not exist "%file1%" (
    echo "%file1%" no existe.
    exit /b 1
)
if not exist "%file2%" (
    echo "%file2%" no existe.
    exit /b 1
)

rem Proceso cuando ambos archivos existen

pause
endlocal

Si falta alguno de los dos archivos, este script muestra un mensaje y termina con el código de salida 1. Los códigos de salida se explican en

.

Resumen

  • Usa if exist "ruta" para comprobar si existe un archivo o una carpeta
  • Usa if not exist "ruta" cuando la condición sea que no exista
  • Encierra la ruta entre comillas dobles para admitir espacios
  • Un \ final limita la comprobación a carpetas
  • Escribe ) else ( en una sola línea

Artículos relacionados

Preguntas de práctica

Problema de práctica

¿Qué comando muestra un mensaje cuando el archivo no existe?

Elige una respuesta.

  1. if exist "%file%" echo falta
  2. if not exist "%file%" echo falta
  3. if exists "%file%" echo falta

Problema de práctica

¿Cuál es la forma más adecuada de comprobar únicamente si existe una carpeta?

Elige una respuesta.

  1. if exist "%dir%"
  2. if exist "%dir%\"
  3. if folder "%dir%"
#Símbolo del sistema #Archivo por lotes #Condicionales #if exist #Operaciones con archivos