Verificación de existencia de archivos
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.
if exist "ruta" (
rem Proceso cuando el archivo existe
)
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.
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.
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 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.
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.
if exist "%file_path%" if not exist "%file_path%\" (
echo Existe como archivo.
)
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.
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.
if not exist "%file_path%" (
type nul > "%file_path%"
)
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