HOWTO · Batch
Cómo descargar un archivo desde una URL en un script por lotes
Use curl desde un script por lotes de Windows para descargar un archivo o varios archivos a rutas elegidas y luego compruebe si cada transferencia tuvo éxito.
En esta página
Use curl, un ejecutable llamado por un script por lotes de Windows, para descargar una URL a un nombre de archivo elegido. Los ejemplos siguientes muestran una descarga, un bucle para varias URL y una comprobación del estado de salida de curl. Primero confirme que curl está disponible ejecutando curl --version en el símbolo del sistema; la disponibilidad depende de la instalación de Windows y de la configuración de PATH.
Descargar un archivo con curl
Guarde lo siguiente como download.bat, reemplace la URL por la dirección del archivo y cambie el destino si es necesario. El valor entre comillas de OUTPUT permite espacios en la ruta. La opción -o escribe el cuerpo de la respuesta en ese archivo, en el directorio desde el que ejecuta el script (o en la ruta completa que establezca).
Ejecute este ejemplo desde el símbolo del sistema. Comprueba que curl esté disponible antes de iniciar la transferencia, por lo que el script también termina limpiamente en un equipo donde curl no está en PATH.
@echo off
where curl >nul 2>nul
if errorlevel 1 (
echo curl is not available on PATH.
exit /b 0
)
set "URL=https://example.com/archive.zip"
set "OUTPUT=archive.zip"
curl --fail --location --output "%OUTPUT%" "%URL%"
curl is not available on PATH.
--location sigue las redirecciones. --fail hace que las respuestas de error HTTP, como 404, devuelvan un estado de error, lo que resulta útil cuando el script comprueba el resultado. Reemplace la URL de ejemplo por una URL de archivo real antes de ejecutar el script.
Descargar varios archivos en un script por lotes
Para una lista corta de URL, guarde cada dirección y nombre de archivo de destino en una línea separada de un archivo de texto y luego lea cada línea en un bucle por lotes. Esto mantiene los espacios fuera de la lista de URL y hace explícitos los nombres de salida. El script siguiente crea su lista en el directorio temporal y luego la elimina al terminar. Reemplace las filas de ejemplo y la carpeta de salida según su tarea. Comprueba si curl está disponible antes de crear la lista o iniciar cualquier transferencia.
@echo off
setlocal
where curl >nul 2>nul
if errorlevel 1 (
echo curl is not available on PATH.
exit /b 0
)
set "OUTPUT_DIR=downloads"
set "LIST=%TEMP%\downloads.csv"
> "%LIST%" echo report.zip,https://example.com/report.zip
>> "%LIST%" echo guide.pdf,https://example.com/guide.pdf
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
for /f "usebackq tokens=1,* delims=," %%A in ("%LIST%") do (
curl --fail --location --output "%OUTPUT_DIR%\%%A" "%%B"
if errorlevel 1 echo Failed: %%B
)
del "%LIST%"
curl is not available on PATH.
Cada archivo se guarda con su nombre indicado en la carpeta downloads. Mantenga los nombres de archivo sin comas porque el bucle usa una coma para separar cada nombre de su URL. La comprobación if not exist permite que el script se ejecute cuando la carpeta ya está presente.
Gestionar errores de descarga
Batch almacena el estado de salida del comando ejecutado más recientemente en errorlevel. Compruébelo inmediatamente después de curl, antes de que otro comando pueda reemplazarlo. Un estado cero indica éxito; un estado distinto de cero indica un problema de transferencia. Con --fail, las respuestas de error HTTP también se notifican como errores. Este ejemplo informa cuando curl no está disponible y, en caso contrario, comprueba el estado de curl inmediatamente después de la transferencia:
@echo off
where curl >nul 2>nul
if errorlevel 1 (
echo curl is not available on PATH.
exit /b 0
)
set "URL=https://example.com/archive.zip"
set "OUTPUT=archive.zip"
curl --fail --location --output "%OUTPUT%" "%URL%"
if errorlevel 1 (
echo Download failed. Check the URL, connection, and HTTP response.
) else (
echo Download completed successfully: %OUTPUT%
)
curl is not available on PATH.
Opciones útiles de curl y notas de Windows
Use --output (o -o) para elegir un nombre de archivo; use --location (o -L) cuando el servidor redirija la solicitud. curl normalmente muestra un medidor de progreso de la transferencia en un terminal. Para scripts donde esa visualización es innecesaria, --silent (o -s) suprime el medidor y otros mensajes de progreso; agregue --show-error (-S) para mantener visibles los mensajes de error. Sin una opción de salida, curl escribe el cuerpo de la respuesta en la salida estándar, que puede ser el terminal. No necesariamente contiene código fuente de directorio.
Si el símbolo del sistema informa de que no se reconoce curl, instale o localice un ejecutable de curl y hágalo invocable desde el script, o use su ruta completa en el comando. Los ejemplos usan sintaxis por lotes de Windows y transferencias de red, por lo que su comportamiento depende del entorno local de Windows, la instalación de curl y el servidor remoto.