Windows 内置 FTP 功能的命令行用法
ftp.exe 是什么
ftp.exe 是 Windows 自带的 FTP 命令行工具,从 Windows NT 时代就有了。它是一个交互式命令行程序,通过输入 FTP 标准命令来操作。虽然不如图形界面直观,但在以下场景有独特优势:
- 需要写脚本自动传输文件(比如每天备份相册)
- 服务器环境没有图形界面(如 Windows Server Core)
- 想精确控制 FTP 会话的每一步
启动 ftp.exe
方法一:直接输入地址连接
在 PowerShell 或 CMD 里输入:
ftp 192.168.1.5
然后按提示输入用户名(匿名模式填 anonymous)和密码。
方法二:先启动 ftp.exe 再连接
ftp
进入 ftp 提示符后:
ftp> open 192.168.1.5
ftp> user anonymous
ftp> pass
ftp> 2121
(如果端口不是 21,需要在 open 命令里指定端口,如 open 192.168.1.5 2121)
常用 FTP 命令
| 命令 | 作用 | 示例 |
|---|---|---|
open IP [port] | 连接 FTP 服务器 | open 192.168.1.5 2121 |
user [username] | 登录用户 | user anonymous |
pass [password] | 输入密码 | 匿名模式随便输 |
ls 或 dir | 列出远程目录 | dir |
cd 路径 | 切换远程目录 | cd DCIM/Camera |
lcd 路径 | 切换本地目录 | lcd D:\Photos |
get 文件名 | 下载单个文件 | get photo.jpg |
put 文件名 | 上传单个文件 | put document.pdf |
mget 通配符 | 批量下载 | mget *.jpg |
mput 通配符 | 批量上传 | mput *.apk |
ascii | 切换 ASCII 传输模式(文本文件) | ascii |
binary | 切换二进制传输模式(图片、视频、APK 必须用这个) | binary |
bye 或 quit | 断开连接并退出 | bye |
status | 查看当前状态 | status |
快速传输示例
下载手机相机的所有 jpg 到电脑 D:\Photos
ftp
open 192.168.1.5 2121
user anonymous
pass
cd DCIM/Camera
lcd D:\Photos
binary
mget *.jpg
bye
解释:
- 启动 ftp.exe
- 连接手机 FTP 服务(IP + 端口)
- 匿名登录
- 切换远程目录到相机目录
- 切换本地目录到 D:\Photos
- 重要!切换到二进制模式——图片视频 APK 必须用二进制,否则会损坏
- 批量下载所有 jpg 文件
- 退出
上传电脑上的 APK 到手机 Download 目录
ftp
open 192.168.1.5 2121
user anonymous
pass
cd Download
lcd D:\APK
binary
put myapp.apk
bye
批量脚本化
ftp.exe 可以用 -s:脚本文件 参数执行脚本,实现完全自动化:
第一步:写脚本文件 backup.txt
open 192.168.1.5 2121
user anonymous
pass
cd DCIM/Camera
lcd D:\Photos\Backup
binary
mget *.jpg
mget *.mp4
bye
第二步:运行脚本
ftp -s:backup.txt
把这个命令加到 Windows 任务计划程序里,就能定时自动备份手机照片到电脑——前提是 FTP 服务在你安排的时间处于运行状态。
注意事项
二进制模式!
这是 ftp.exe 最容易踩的坑——默认是 ASCII 模式,只适合纯文本文件。传输图片、视频、APK、PDF 等二进制文件时必须先输入 binary 命令,否则文件会损坏(看起来传输完成了但打不开)。
ftp> binary
200 Type set to I.
看到 200 Type set to I. 响应就说明切到二进制模式了(I = Image,FTP 协议里代表二进制)。
被动模式
ftp.exe 默认使用主动模式(PORT),某些网络环境下被防火墙拦截。如果连接能建立但传输文件超时:
ftp> passive
Passive mode On.
被动模式下客户端发起数据连接,更容易穿透防火墙。
不支持 SFTP
Windows 内置的 ftp.exe 只支持标准 FTP 协议,不支持 SFTP。需要 SFTP 的话用 FileZilla 或 WinSCP。
中文文件名
ftp.exe 对中文文件名的支持取决于 Windows 的区域设置。如果远程文件名是乱码,可能需要切换代码页:
chcp 65001 # 切换到 UTF-8 代码页
ftp ... # 然后再启动 ftp
或者在 ftp 会话里输入 quote OPTS UTF8 ON 让服务器启用 UTF-8 支持。
用 PowerShell 脚本替代 ftp.exe
PowerShell 也可以写 FTP 上传下载脚本,不用依赖 ftp.exe:
$ftp = "ftp://192.168.1.5:2121/Download/myapp.apk"
$file = "D:\APK\myapp.apk"
$cred = New-Object System.Management.Automation.PSCredential("anonymous", (ConvertTo-SecureString "pass" -AsPlainText -Force))
# 上传
Invoke-WebRequest -Uri $ftp -InFile $file -Method Put -Credential $cred
这个方法更现代、更灵活,但本质上还是 FTP 协议,有同样的二进制模式注意事项。