DDR爱好者之家 Design By 杰米
FTP不支持目录的下载,不过FTP命令提供了mget命令,允许多文件下载,但每下载一个文件都需要确认,不能自动完成。本文主要介绍使用批处理,结合FTP的相关命令来实现批量文件的下载,以便达到目录下载的目的。

  大致想法如下:

使用FTP下载目录,即FTP命令批量自动下载的bat文件ftp -s:filename hosts >result.txt 执行脚本,并将结果定向输出到result.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件脚本内容,如
使用FTP下载目录,即FTP命令批量自动下载的bat文件cd mydir
使用FTP下载目录,即FTP命令批量自动下载的bat文件ls
使用FTP下载目录,即FTP命令批量自动下载的bat文件bye
使用FTP下载目录,即FTP命令批量自动下载的bat文件可以将mydir命令列出
使用FTP下载目录,即FTP命令批量自动下载的bat文件然后使用批处理分析result.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件从150 Opening ASCII mode data connection for file list.的下一行开始算,直到226 Transfer complete都是要下载的内容
使用FTP下载目录,即FTP命令批量自动下载的bat文件然后用批处理加ftp脚本,使用get命令逐个下载

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

  查看了ftp的帮助ftp -?

使用FTP下载目录,即FTP命令批量自动下载的bat文件G:>ftp -?
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件Transfers files to and from a computer running an FTP server service
使用FTP下载目录,即FTP命令批量自动下载的bat文件(sometimes called a daemon). Ftp can be used interactively.
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [-A] [host]
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -v             Suppresses display of remote server responses.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -n             Suppresses auto-login upon initial connection.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -i             Turns off interactive prompting during multiple file
使用FTP下载目录,即FTP命令批量自动下载的bat文件                 transfers.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -d             Enables debugging.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -g             Disables filename globbing (see GLOB command).
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -s:filename    Specifies a text file containing FTP commands; the
使用FTP下载目录,即FTP命令批量自动下载的bat文件                 commands will automatically run after FTP starts.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -a             Use any local interface when binding data connection.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -A             login as anonymous.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  -w:buffersize  Overrides the default transfer buffer size of 4096.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  host           Specifies the host name or IP address of the remote
使用FTP下载目录,即FTP命令批量自动下载的bat文件                 host to connect to.
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件Notes:
使用FTP下载目录,即FTP命令批量自动下载的bat文件  - mget and mput commands take y/n/q for yes/no/quit.
使用FTP下载目录,即FTP命令批量自动下载的bat文件  - Use Control-C to abort commands.
使用FTP下载目录,即FTP命令批量自动下载的bat文件

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

使用FTP下载目录,即FTP命令批量自动下载的bat文件echo cd autoruns>ftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo mget *ftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo byeftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件ftp -i -A -s:ftp.txt 10.1.103.10

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

使用FTP下载目录,即FTP命令批量自动下载的bat文件echo cd autoruns>ftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo dirftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo byeftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件ftp -A -s:ftp.txt 10.1.103.10 |find "<DIR>">result.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件for /f "tokens=2,3*" %%i in (result.txt) do echo %%k

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

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

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

使用FTP下载目录,即FTP命令批量自动下载的bat文件rem FTP服务器地址
使用FTP下载目录,即FTP命令批量自动下载的bat文件set host=10.1.103.10
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem FTP登入名,如果匿名不用改
使用FTP下载目录,即FTP命令批量自动下载的bat文件set user=anonymous
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem FTP登入密码,如果匿名不用改
使用FTP下载目录,即FTP命令批量自动下载的bat文件set pass=123456
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem 需要下载的FTP目录,如果下载子目录以分格
使用FTP下载目录,即FTP命令批量自动下载的bat文件set dirname=目录1子目录
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件set homedir=%cd%
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem 生成FTP目录结构
使用FTP下载目录,即FTP命令批量自动下载的bat文件del tree.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件start /w cmd /c makeTree %dirname% 0
使用FTP下载目录,即FTP命令批量自动下载的bat文件del result*.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件for /f "delims=/" %%i in (tree.txt) do (
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem 获取dirname的所有文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem =============================
使用FTP下载目录,即FTP命令批量自动下载的bat文件cd %homedir%
使用FTP下载目录,即FTP命令批量自动下载的bat文件md %%i
使用FTP下载目录,即FTP命令批量自动下载的bat文件cd /d %%i
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo %user%>ftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo %pass%ftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo cd %%iftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem mget *.* 下载所有文件,但不能下载无扩展名的文件;
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem 如果使用mget * 可以下载所有文件,但会把子目录的文件也下载过来
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo mget *.*ftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo byeftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件ftp -i -A -s:ftp.txt %host%
使用FTP下载目录,即FTP命令批量自动下载的bat文件del ftp.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem ==============================
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件)
使用FTP下载目录,即FTP命令批量自动下载的bat文件cd %homedir%
使用FTP下载目录,即FTP命令批量自动下载的bat文件del tree.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件

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

使用FTP下载目录,即FTP命令批量自动下载的bat文件rem 生成FTP目录结构
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem 调用方法 maketree dir1dir2 n (n>=1)
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem %1 == dir1dir2
使用FTP下载目录,即FTP命令批量自动下载的bat文件rem %2 == n
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件set /a treetime=%2+1
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo %1 tree.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo %user% >ftp%treetime%.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo %pass% ftp%treetime%.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo cd %1 ftp%treetime%.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo dir ftp%treetime%.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件echo bye ftp%treetime%.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件ftp -A -s:ftp%treetime%.txt %host% |find "<DIR>">result%treetime%.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件for /f "tokens=2,3*" %%i in (result%treetime%.txt) do (start /w cmd /c Maketree.bat %1%%k %treetime%)
使用FTP下载目录,即FTP命令批量自动下载的bat文件del result%treetime%.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件del ftp%treetime%.txt
使用FTP下载目录,即FTP命令批量自动下载的bat文件
使用FTP下载目录,即FTP命令批量自动下载的bat文件

 

  虽然已经实现,但仍然有小问题,就是mget *.* 不能下载无扩展名的程序;如果使用mget * 可以下载所有文件,但会把子目录的文件也下载过来。get在FTP脚本中出错也不知为何。

相关信息参考: 使用FTP 批处理脚本,Ftp 子命令

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米