在尝试用批处理命令实现FTP自动上传和下载的时候,发现了如下问题:
配置文件User.cfg如下(假设ftp服务器是10.3.20.199,用户名是myuser,密码是mypwd
-------------------------------------------------------------------
open 10.3.20.199
user admin1 1
bin
prompt off
put FIRMWARE
bye
ftp -s:user.cfg
del abc.txt
echo. & pause
在命令行中执行这个test.bat.执行了多次,没有一次能够成功登陆!命令行执行时的提示如下:
ftp> open 10.3.20.199
Connected to10.3.20.199.
220 Microsoft FTP Service
User (h216.72dns.net:(none)):
331 Password required for myuser .
530 User myuser cannot log in.
Login failed.
ftp> bye
221
请按任意键继续...
如果手动输入FTP命令,
(手动键入)ftp(回车)
ftp>(手动键入)open 10.3.20.199(回车)
(出提示)Connected to10.3.20.199.
220 Microsoft FTP Service
User (h216.72dns.net:(none)):(手动键入)myuser(回车)
(出提示)331 Password required for myuser.
Password:(手动键入)mypwd(回车)
(出提示)230 User myuser logged in.
ftp>(手动键入)bye(回车)
(出提示)221
成功了。这种方法其实就是正常的手动登陆,100%会成功的。
.
问题在哪里呢?
在于FTP每次链接的时候,会去自动链接,如果加上-n参数,则可以正常登陆
上述批处理脚本改为 ftp -n -s:user.cfg 10.3.20.199, 则可以正常上传下载文件。
同时为了去掉put每次提醒是否上传文件,需要把prompt off关掉。
下面是FTP命令的参数接收
Z:\Workspace\Bin>ftp -h
将文件传送到运行 FTP 服务器服务(经常称为后台程序)的计算机以及将文件从该计算机
传出。可以交互使用 Ftp。
FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-x:sendbuffer] [-r:recvbuf
fer] [-b:asyncbuffers] [-w:windowsize] [host]
-v 禁止显示远程服务器响应。
-n 禁止在初始连接时自动登录。
-i 关闭多文件传输过程中的
交互式提示。
-d 启用调试。
-g 禁用文件名通配(请参阅 GLOB 命令)。
-s:filename 指定包含 FTP 命令的文本文件;命令
在 FTP 启动后自动运行。
-a 在绑字数据连接时使用所有本地接口。
-A 匿名登录。
-x:send sockbuf 覆盖默认的 SO_SNDBUF 大小 8192。
-r:recv sockbuf 覆盖默认的 SO_RCVBUF 大小 8192。
-b:async count 覆盖默认的异步计数 3
-w:windowsize 覆盖默认的传输缓冲区大小 65535。
host 指定主机名称或要连接到的远程主机
的 IP 地址。
注意:
- mget 和 mput 命令将 y/n/q 视为 yes/no/quit。
- 使用 Ctrl-C 中止命令
阅读(5137) | 评论(0) | 转发(0) |