在日常工作或自动化任务中,我们经常需要从网络上批量下载软件安装包、数据文件或工具更新程序。相比传统浏览器手动点击下载,命令行工具能够提供更高的灵活性和效率。
本文将介绍一款轻量级但功能强大的命令行下载工具 aria2,并通过多个实用的批处理示例说明如何使用它完成各种下载任务。
一、aria2 简介
aria2
是一个跨平台的命令行下载工具,支持 HTTP/HTTPS、FTP、BitTorrent、Metalink 等协议。它体积小巧但功能强大,具备多线程下载、断点续传、下载限速、自定义请求头等特性,非常适合在批处理脚本或自动化流程中使用。
二、aria2 下载示例(以 WinRAR 安装包为例)
以下为一些典型的使用场景,均可直接写入 .bat
批处理文件中运行。
1. 切换到指定目录
cd /d E:\test
将当前工作目录切换至 E:\test
,用于保存下载的文件。
2. 基础下载(保留原文件名)
start "" "E:\aria2-1.37.0\aria2c.exe" "https://www.winrar.com.cn/download/winrar-x64-711scp.exe"
3. 下载并重命名本地文件
start "" "E:\aria2-1.37.0\aria2c.exe" "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-01.exe"
4. 限制最大重试次数
start "" "E:\aria2-1.37.0\aria2c.exe" --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-02.exe"
5. 开启多线程加速下载
start "" "E:\aria2-1.37.0\aria2c.exe" -x 1 -s 5 --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-03.exe"
其中 -x
设置每个服务器连接数,-s
为分段数。
6. 设置下载超时时间
start "" "E:\aria2-1.37.0\aria2c.exe" --timeout=100 --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-04.exe"
7. 限速下载(防止占用带宽)
start "" "E:\aria2-1.37.0\aria2c.exe" --max-overall-download-limit=100K --timeout=100 --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-05.exe"
这里限制下载速度为 100KB/s。
8. 模拟浏览器请求(避免被服务器拦截)
start "" "E:\aria2-1.37.0\aria2c.exe" ^
--header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188" ^
--header="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" ^
--header="Accept-Language: zh-CN,zh;q=0.9" ^
--max-overall-download-limit=100K --timeout=100 --max-tries=5 ^
"https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-06.exe"
这种方式可以模拟真实用户的浏览器行为,有助于绕过一些防爬虫或验证机制。
9. 静默下载并等待结束
start "" /b /wait "E:\aria2-1.37.0\aria2c.exe" "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-07.exe" >nul 2>&1
/b
表示在当前窗口中后台执行,/wait
表示等待任务完成后再继续执行后续命令,>nul 2>&1
表示屏蔽命令输出,实现完全静默。
10. 切换工作目录和下载目录
rem 切换到工作目录(第一个"E:\test",缓存文件的存放路径),下载文件到下载目录(第二个"E:\test",下载文件的存放路径,路径后面必须没有\),并修改名称
start "" /d "E:\test" "E:\aria2-1.37.0\aria2c.exe" "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -d "E:\test" -o "winrar-711scp-08.exe"
Aria2 批处理命令参数说明
参数部分 | 含义与作用 |
---|---|
start "" | 启动一个新进程。空字符串 "" 是窗口标题,必须保留。 |
/d "E:\test" | 指定新进程的工作目录(Working Directory)。aria2c 会在此目录下执行,临时文件等保存在此目录。 |
"E:\aria2-1.37.0\aria2c.exe" | 指定 aria2c.exe 的绝对路径,即下载程序的位置。 |
"https://...exe" | 下载链接,aria2c 会从该 URL 下载文件。 |
-d "E:\test" | 指定文件的下载目录。路径不能以反斜杠 \ 结尾,必须是合法的文件夹路径。 |
-o "winrar-711scp-08.exe" | 指定下载完成后保存的本地文件名称。默认会根据 URL 自动命名,这里是手动指定文件名。 |
重要提示:
- 下载目录
-d
路径不能带结尾反斜杠\
。如:E:\test
正确,E:\test\
会导致错误或路径解析失败。 aria2c
的默认行为是:- 把下载缓存、临时文件(如
.aria2
文件)存放在工作目录; - 把最终文件保存到
-d
指定的路径; - 如果不使用
-o
,则根据 URL 自动命名。
- 把下载缓存、临时文件(如
start
的/d
指定工作目录后,可以避免在主脚本中使用cd /d
切换路径,更加清晰、模块化。
三、全部代码
切换到当前工作目录 E:\test
cd /d E:\test
使用aria2下载文件到当前工作目录
start "" "E:\aria2-1.37.0\aria2c.exe" "https://www.winrar.com.cn/download/winrar-x64-711scp.exe"
使用aria2下载文件到工作目录,并修改本地文件名称
start "" "E:\aria2-1.37.0\aria2c.exe" "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-01.exe"
指定最大重试次数5次,下载并修改本地文件名称
start "" "E:\aria2-1.37.0\aria2c.exe" --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-02.exe"
指定多线程下载,下载并修改本地文件名称
start "" "E:\aria2-1.37.0\aria2c.exe" -x 1 -s 5 --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-03.exe"
将下载超时设置为100秒,指定最大重试次数5次,下载并修改本地文件名称
start "" "E:\aria2-1.37.0\aria2c.exe" --timeout=100 --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-04.exe"
将下载速度限制为 100 Kbps,将下载超时设置为100秒,指定最大重试次数5次,下载并修改本地文件名称
start "" "E:\aria2-1.37.0\aria2c.exe" --max-overall-download-limit=100K --timeout=100 --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-05.exe"
使用自定义 Referer,将下载速度限制为 100 Kbps,将下载超时设置为100秒,指定最大重试次数5次,下载并修改本地文件名称
start "" "E:\aria2-1.37.0\aria2c.exe" --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188" --header="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" --header="Accept-Language: zh-CN,zh;q=0.9" --max-overall-download-limit=100K --timeout=100 --max-tries=5 "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-06.exe"
在批处理当前窗口静默下载,会阻挡当前窗口其他命令的执行,必须任务完成,才能继续下一步。
start "" /b /wait "E:\aria2-1.37.0\aria2c.exe" "https://www.winrar.com.cn/download/winrar-x64-711scp.exe" -o "winrar-711scp-07.exe" >nul 2>&1


应用实践
在autoit代码中,使用 aria2c 下载,功能正常,隐藏窗口,带下载进度输出,成功返回1,失败返回-1
; ========== 使用 aria2c 下载,功能正常,隐藏窗口,带进度 ==========
Func __Download_By_Aria2($url, $path)
; 找到最后一个反斜杠的位置以分隔文件夹和文件名
Local $slashPos = StringInStr($path, "\", 0, -1)
; 检查路径格式是否正确
If $slashPos = 0 Then
ConsoleWrite("错误: 无效的保存路径。" & @CRLF)
Return -2 ; 返回 -2 表示路径格式错误
EndIf
; 提取目录部分,不带末尾反斜杠
Local $dir = StringLeft($path, $slashPos - 1)
; 提取文件名部分
Local $file = StringMid($path, $slashPos + 1)
; 如果目录不存在,则创建目录
If Not FileExists($dir) Then DirCreate($dir)
; 检查 aria2c 可执行文件是否存在
Local $aria2c = "C:\path\to\aria2c.exe" ; 请替换为实际的 aria2c 路径
If Not FileExists($aria2c) Then
ConsoleWrite("错误: 找不到 aria2c 可执行文件。" & @CRLF)
Return -1 ; 返回 -1 表示 aria2c 不存在
EndIf
; 构建执行 aria2c 的命令,指定 URL 和保存路径
Local $cmd = '"' & $aria2c & '" --console-log-level=warn --summary-interval=1 -d "' & $dir & '" -o "' & $file & '" "' & $url & '"'
; 启动 aria2c 并重定向输出
Local $iPID = Run($cmd, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
; 正则表达式模式,用于匹配下载进度信息
Local $sPattern = "\[#\w+\s+([\d\.]+[KMG]?iB)/([\d\.]+[KMG]?iB)\((\d+%)\)\s+CN:\d+\s+DL:([\d\.]+[KMG]?iB)\s+ETA:(\d+s)\]"
; 读取输出并解析进度
While 1
Local $sOutput = StdoutRead($iPID)
If @error Then ExitLoop
; 解析输出中的进度信息
If StringInStr($sOutput, "[#") Then
Local $aMatch = StringRegExp($sOutput, $sPattern, 1)
If Not @error Then
; 格式化进度信息
Local $Match = $aMatch[0] & "/" & $aMatch[1] & " (" & $aMatch[2] & ") " & $aMatch[3] & "/s " & $aMatch[4]
; 显示下载进度到状态栏
_GUICtrlStatusBar_SetText($Bar1, "下载中: " & $Match, 4)
EndIf
EndIf
Sleep(1000) ; 每秒更新一次
WEnd
; 检查下载是否完成
If FileExists($path) And FileGetSize($path) > 1024 Then
ConsoleWrite("下载完成!" & @CRLF)
_GUICtrlStatusBar_SetText($Bar1, "下载完成!", 4)
Return 1 ; 下载成功
Else
ConsoleWrite("错误: 下载失败或文件大小不足。" & @CRLF)
Return -3 ; 返回 -3 表示下载失败或文件大小不足
EndIf
EndFunc

四、总结建议
- aria2 非常适合在批处理、脚本任务中批量下载文件。
- 推荐在慢速或不稳定网络环境中使用限速+重试参数以增强容错性。
- 在需要模拟浏览器时,可通过
--header
添加合适的User-Agent
和 Referer。 - 使用
start "" /wait
配合>nul 2>&1
可以做到完全静默控制。 - 如果出现“不是内部或外部命令”错误,请检查
aria2c.exe
的调用命令是否正确。
希望以上内容对你在实际工作中有所帮助。如果你也在做批量部署或离线下载自动化任务,不妨试试这款小巧而强大的工具 —— aria2。
如有疑问或改进建议,欢迎留言讨论!