基础方法:下载单个文件
若只需下载单个文件,可直接使用FTP命令:
ftp -s:commands.txt
其中commands.txt
内容示例:
open ftp.example.com # FTP服务器地址
username # 替换为实际用户名
password # 替换为实际密码
binary # 二进制传输模式(适用于非文本文件)
get remote_file.txt local_file.txt # 下载文件
bye
下载整个文件夹(无子目录)
FTP命令本身不支持递归下载,但可通过以下步骤下载目标文件夹内所有文件(不含子文件夹):
- 创建脚本文件
ftp_commands.txt
:open ftp.example.com username password binary cd /remote_folder # 远程目标文件夹路径 lcd C:\local_folder # 本地保存路径 prompt # 关闭交互提示(避免逐个文件确认) mget * # 下载所有文件 bye
- 执行脚本:
ftp -n -s:ftp_commands.txt
参数说明:
-n
:禁用自动登录(脚本中已包含登录信息)。-s
:指定命令脚本文件。
递归下载整个目录(含子文件夹)
需借助批处理循环实现递归下载:
-
生成文件列表:
创建list_files.txt
获取远程目录结构:open ftp.example.com username password cd /remote_folder ls -R files_list.txt # 生成文件列表(UNIX风格FTP需支持ls -R) bye
ftp -n -s:list_files.txt
-
解析列表并下载:
创建批处理脚本download.bat
:@echo off set FTP_SCRIPT=ftp_commands.tmp set REMOTE_DIR=/remote_folder set LOCAL_DIR=C:\local_folder for /f "tokens=*" %%i in (files_list.txt) do ( echo open ftp.example.com > %FTP_SCRIPT% echo username >> %FTP_SCRIPT% echo password >> %FTP_SCRIPT% echo binary >> %FTP_SCRIPT% echo cd %REMOTE_DIR%/%%i >> %FTP_SCRIPT% 2>nul echo lcd %LOCAL_DIR%\%%i >> %FTP_SCRIPT% echo mget * >> %FTP_SCRIPT% echo bye >> %FTP_SCRIPT% ftp -n -s:%FTP_SCRIPT% ) del %FTP_SCRIPT%
注意:
- 此方法依赖FTP服务器返回的目录列表格式(需提前测试
ls -R
输出)。 - 复杂目录结构建议使用专业工具(见下文替代方案)。
- 此方法依赖FTP服务器返回的目录列表格式(需提前测试
注意事项与局限
-
密码安全:
脚本中密码为明文,存在安全风险,建议:- 使用临时脚本并立即删除。
- 改用SFTP/FTPS等加密协议(需第三方工具支持)。
-
FTP命令限制:
- 不支持断点续传、多线程下载。
- 文件名含空格或特殊字符时可能出错。
- 目录结构复杂时递归脚本可能失败。
-
替代方案推荐:
- WinSCP:图形化界面或脚本支持递归下载(示例脚本):
winscp.com /command "open ftp://username:password@ftp.example.com/" "get -r /remote_folder C:\local_folder\" "exit"
- cURL:命令行工具支持递归下载:
curl -u username:password --ftp-create-dirs -O "ftp://ftp.example.com/remote_folder/*" -o "C:\local_folder/"
- wget:需安装后使用:
wget -r --ftp-user=username --ftp-password=password ftp://ftp.example.com/remote_folder/
- WinSCP:图形化界面或脚本支持递归下载(示例脚本):
- 简单需求:用
mget *
下载无子目录的文件夹。 - 复杂需求:优先选用
WinSCP
、cURL
或wget
等工具支持递归下载。 - 安全提示:避免在共享环境中存储明文密码,敏感操作后及时删除脚本。
引用说明:
本文提及的ftp.exe
为Windows内置工具,WinSCP
可在winscp.net获取,cURL
官网为curl.se,wget
需通过GnuWin32安装。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6964.html