ftp 常用命令

请注意,以下所有命令均是在 cmd 中输入

# ftp 登陆远程机
C:\Users\zhao > ftp 10.11.111.11    # 连接你的 ftp 客户端
user:                  # 输入帐号
password:              # 输入密码
ftp > help             # 列出所有可使用的 ftp 命令
ftp > ls              # 显示 ftp 客户端当前目录列表
ftp > dir            # 显示 ftp 客户端当前目录列表
ftp > !dir             # 显示本机目录列表
ftp > pwd             # 目前在 ftp 客户端的位置
ftp > cd A           # 进入 ftp 客户端 A 目录
ftp > lcd B           # 进入本机 B 目录
ftp > ascii         # 采用 ASCII 模式传输数据,用于文本文件
ftp > bin            # 采用二进制模式传输数据,如果有可执行程序必须以此模式
ftp > get C.txt      # 下载 ftp 客户端 A 目录下的 C.txt 到本机的 B 目录下
ftp > put D.dat      # 上传本机 B 目录下的 D.dat 到 ftp 客户端的 A 目录下
ftp > mget *.txt     # 将 ftp 客户端当前目录下所有 txt 文件下载到本机
ftp > mput *.txt     # 将本机所有 txt 文件上传到 ftp客户端
ftp > prompt         # 切换模式,主要用于 mget 或 mput 时不用每个文件都要选择 yes 或 no
ftp > quit          # 结束 ftp 工作
ftp > bye           # 同上

一个案例

之前用 bat 写过一个 ftp 自动下载流体数据的脚本,用于每天上午 08:00 整自动 ftp 登陆流体仪器下载头一天的水位、水温、气象三要素等文件,主要代码如下:

@echo off
color 0a 
rem 获取昨天日期
:yesterday
set YE=%date:~0,4%
set MO=%date:~5,2%
set DA=%date:~8,2%
set DG=1
set/a vY1=%YE% %% 400
set/a vY2=%YE% %% 4
set/a vY3=%YE% %% 100
if %vY1%==0 (set var=true) else (if %vY2%==0 (if %vY3%==0 (set var=false) else (set var=true)) else (set var=false))
set LY=%YE%
set LM=%MO%
if %MO:~0,1%==0 (set MO=%MO:~1,1%)
if %DA:~0,1%==0 (set DA=%DA:~1,1%)
if %DA% GTR %DG% (set/a LD=%DA%-%DG%) else (
if %MO%==1 (set/a LY=%YE%-1) & (set/a LM=12+%MO%-1) & (set/a LD=31+%DA%-%DG%) else (
set/a LM=%MO%-1
if %MO%==3 (if %var%==false (set/a LD=28+%DA%-%DG%) else (set/a LD=29+%DA%-%DG%))
for %%a in (2 4 6 8 9 11) do (if "%MO%"=="%%a" (set/a LD=31+%DA%-%DG%))
for %%b in (5 7 10 12) do (if "%MO%"=="%%b" (set/a LD=30+%DA%-%DG%))))
if %LM% LSS 10 set LM=0%LM:~-1%
if %LD% LSS 10 set LD=0%LD:~-1%
set Han=
set Han=%LY%%LM%%LD%
echo 昨天的日期为:%LY%年%LM%月%LD%日
call :辛集三要素
call :宁晋水位
call :宁晋水温
call :宁晋三要素

rem 更改格式与辛集模拟水位一致
if %LM:~0,1%==0 (set LM=%LM:~1,1%)
if %LD:~0,1%==0 (set LD=%LD:~1,1%)
set HAN=%LY%.%LM%.1-%LM%.%LD%
ECHO %HAN%
call :辛集模拟水位
PAUSE
exit

:辛集模拟水位
ECHO.
echo 开始下载辛集%LY%年%LM%月%LD%日模拟水位数据
type 辛集模拟水位.ftp > temp.ftp
call :aaa
ftp -n -s:"d:\流体下载程序\temp.ftp"
goto :eof

:辛集三要素
echo 开始下载辛集%LY%年%LM%月%LD%日三要素数据
type 辛集三要素.ftp > temp.ftp
call :aaa
ftp -n -s:"d:\流体下载程序\temp.ftp"
ECHO.
goto :EOF
      
:宁晋水位
ECHO.
echo 开始下载宁晋%LY%年%LM%月%LD%日水位数据
type 宁晋水位.ftp > temp.ftp
call :aaa
ftp -n -s:"d:\流体下载程序\temp.ftp"
ECHO.
goto :eof

:宁晋水温
echo 开始下载宁晋%LY%年%LM%月%LD%日水温数据
type 宁晋水温.ftp > temp.ftp
call :aaa
ftp -n -s:"d:\流体下载程序\temp.ftp"
ECHO.
goto :eof

:宁晋三要素
echo 开始下载宁晋%LY%年%LM%月%LD%日三要素数据
type 宁晋三要素.ftp > temp.ftp
call :aaa
ftp -n -s:"d:\流体下载程序\temp.ftp"
ECHO.
goto :eof

rem 将输入的dst替换temp.ftp文本中的abc
:aaa
@echo off&setlocal
set f="temp.ftp"
set src=abc
set dst=%HAN%
for /f "usebackq delims=" %%a in (%f%) do (if not defined flag cd.>%f%&set flag=1
set v=%%a
setlocal enabledelayedexpansion
set v=!v:%src%=%dst%!
 echo.!v!>>%f%
 endlocal
)
goto :eof

主要思路是利用 ftp -n -s:" .ftp file" 来执行 .ftp 文件中包含的命令。 .ftp 文件的内容如下所示

# 宁晋三要素.ftp 
open your IP      # your IP 替换成你的仪器 IP
user username   # username 替换成你的用户名
password          # password 替换成你的用户密码
lcd d:\流体下载程序\
bin
prompt
get abc.dat
quit
exit
# 衡水68水位.ftp
open your IP
user username
password
get 13142X411ZKGD9042abc.EPMS
quit
exit