如何在Windows批处理中并行成对调用CURL接口?
批量并行调用接口的Bat脚本解决方案
需求说明
现有本地接口http://127.0.0.1:5001/my-script,需调用页码1到50的接口。原脚本为串行逐个调用,每次调用后等待10秒。现要求改为成对并行调用:同时执行页码1和2,待两者全部完成后等待10秒,再执行3和4,依此类推。
原串行脚本
@echo off for /l %%i in (1,1,50) do ( echo Page number: %%i curl -s -o nul --max-time 120 http://127.0.0.1:5001/my-script?pageNumber=%%i timeout /t 10 )
失败尝试的问题
之前用&连接两个curl命令的写法,虽能并行启动请求,但脚本会直接执行后续的timeout,不会等待两个curl进程全部完成,无法保证每对页码处理完毕后再进入下一轮。
正确实现脚本
@echo off setlocal EnableDelayedExpansion :: 遍历奇数页码,每次处理一对(当前页码+下一页) for /l %%i in (1,2,50) do ( set /a next=%%i+1 echo 正在并行处理页码 %%i 和 !next! :: 以后台方式启动两个curl进程 start /b "" curl -s -o nul --max-time 120 "http://127.0.0.1:5001/my-script?pageNumber=%%i" start /b "" curl -s -o nul --max-time 120 "http://127.0.0.1:5001/my-script?pageNumber=!next!" :: 循环检查所有curl进程是否结束 :wait_loop tasklist /fi "imagename eq curl.exe" | find /i "curl.exe" >nul if not errorlevel 1 ( :: 每隔1秒检查一次,避免占用过多资源 timeout /t 1 /nobreak >nul goto wait_loop ) echo 页码 %%i 和 !next! 处理完成,等待10秒进入下一轮 timeout /t 10 ) :: 处理总页数为奇数的情况(本例50为偶数,可忽略;若为奇数需保留) :: if !next! gtr 50 ( :: echo 处理最后一个单独页码 50 :: curl -s -o nul --max-time 120 "http://127.0.0.1:5001/my-script?pageNumber=50" :: timeout /t 10 :: ) endlocal
关键说明
- 后台启动进程:用
start /b命令让curl在后台运行,实现两个请求并行执行 - 等待进程结束:通过
tasklist检查系统中是否还有curl进程,直到全部结束才继续后续逻辑 - 奇数页码兼容:如果总页数是奇数,最后会剩下一个单独页码,可取消注释最后一段代码处理该情况
- 延迟变量扩展:启用
EnableDelayedExpansion确保循环中!next!变量能正确获取实时计算的值
内容的提问来源于stack exchange,提问作者Andurit
相关产品推荐
相关产品推荐

