快速业务通道

使用FTP下载目录,即FTP命令批量自动下载的bat文件

作者 佚名 来源 批处理 浏览 发布时间 2013-07-09
FTP不支持目录的下载,不过FTP命令提供了mget命令,允许多文件下载,但每下载一个文件都需要确认,不能自动完成。本文主要介绍使用批处理,结合FTP的相关命令来实现批量文件的下载,以便达到目录下载的目的。

  大致想法如下:

ftp-s:filenamehosts>result.txt执行脚本,并将结果定向输出到result.txt
脚本内容,如
cdmydir
ls
bye
可以将mydir命令列出
然后使用批处理分析result
.txt
从150OpeningASCII
modedataconnectionforfilelist.的下一行开始算,直到226Transfercomplete都是要下载的内容
然后用批处理加ftp脚本,使用get命令逐个下载

  但实际过程中发现,在FTP脚本中使用get有问题,提示参数错误,无法使用。

  查看了ftp的帮助ftp -?

G:>ftp-?

Transfers
filestoandfromacomputerrunninganFTPserverservice
(sometimescalledadaemon).Ftpcanbeusedinteractively.

FTP[-v][-d][-i][-n][-g][-s
:filename][-a][-w:windowsize][-A][host]

-vSuppressesdisplayofremoteserverresponses
.
-nSuppressesauto-loginuponinitialconnection
.
-iTurns
offinteractivepromptingduringmultiplefile
transfers
.
-dEnablesdebugging
.
-gDisablesfilenameglobbing
(seeGLOBcommand).
-s
:filenameSpecifiesatextfilecontainingFTPcommands;the
commandswillautomatically
runafterFTPstarts.
-a
Useanylocalinterfacewhenbindingdataconnection.
-Aloginasanonymous
.
-w
:buffersizeOverridesthedefaulttransferbuffersizeof4096.
hostSpecifiesthehostnameorIPaddressoftheremote
hosttoconnectto
.

Notes:
-mgetandmputcommandstakey
/n/qforyes/no/quit.
-
UseControl-Ctoabortcommands.

发现 -i 参数可以去除mget的提示,经过测试,实现了如下脚本(使用了匿名登入,如果非匿名,可以修改登入脚本):

echocdautoruns>ftp.txt
echomget*>>ftp.txt
echobye>>ftp.txt
ftp-i-A-s
:ftp.txt10.1.103.10

  不过,这只是下载了目录中的文件,如果有子目录,那还需要用dir命令输出,并转向输出到文本,用find来提取目录,如:

echocdautoruns>ftp.txt
echodir>>ftp.txt
echobye>>ftp.txt
ftp-A-s
:ftp.txt10.1.103.10|find"<DIR>">result.txt
for/f"tokens=2,3*"%%iin(result.txt)doecho%%k

  如有子文件夹,那就要深入编写了。

  经过编写测试,实现如下脚本,运行环境WINXP SP2,运行通过,未载其它系统上测试过:

1、主要脚本ftpget.bat,更改前4个变量的相关信息,该脚本调用makeTree.bat,请参见2

remFTP服务器地址
sethost=10.1.103.10

remFTP登入名,如果匿名不用改
setuser=anonymous

remFTP登入密码,如果匿名不用改
setpass=123456

rem需要下载的FTP目录,如果下载子目录以分格
setdirname=目录1子目录

sethomedir=%cd%

rem生成FTP目录结构
deltree.txt
start/wcmd/cmakeTree%dirname%0
delresult*.txt

for/f"delims=/"%%iin(tree.txt)do(

rem获取dirname的所有文件
rem
=============================
cd%homedir%
md%%i
cd/d%%i
echo%user%>ftp.txt
echo%pass%>>ftp.txt
echocd%%i>>ftp.txt

remmget*.*下载所有文件,但不能下载无扩展名的文件;
rem
如果使用mget*可以下载所有文件,但会把子目录的文件也下载过来
echomget*.*>>ftp.txt

echobye>>ftp.txt
ftp-i-A-s
:ftp.txt%host%
delftp.txt
rem==============================

)
cd%homedir%
deltree.txt

2、maketree.bat,生成FTP目录树

rem生成FTP目录结构
rem
调用方法maketreedir1dir2n(n>=1)
rem
%1==dir1dir2
rem
%2==n

set/atreetime=%2+1
echo%1>>tree.txt

echo%user%>ftp%treetime%.txt
echo%pass%>>ftp%treetime%.txt
echocd%1>>ftp%treetime%.txt
echodir>>ftp%treetime%.txt
echobye>>ftp%treetime%.txt
ftp-A-s
:ftp%treetime%.txt%host%|find"<DIR>">result%treetime%.txt
for/f"tokens=2,3*"%%iin(result%treetime%.txt)do(start/wcmd/cMaketree.bat%1%%k%treetime%)
delresult%treetime%.txt
delftp%treetime%.txt

 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号