源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-12-31 19:50 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:使用FTP下载目录,即FTP命令批量自动下载的bat文件
FTP不支持目录的下载,不过FTP命令提供了mget命令,允许多文件下载,但每下载一个文件都需要确认,不能自动完成。本文主要介绍使用批处理,结合FTP的相关命令来实现批量文件的下载,以便达到目录下载的目的。   大致想法如下:
[img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] ftp -s:filename hosts >result.txt 执行脚本,并将结果定向输出到result.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] 脚本内容,如 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] cd mydir [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] ls [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] bye [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] 可以将mydir命令列出 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] 然后使用批处理分析result.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] 从150 Opening ASCII mode data connection for file list.的下一行开始算,直到226 Transfer complete都是要下载的内容 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] 然后用批处理加ftp脚本,使用get命令逐个下载
  但实际过程中发现,在FTP脚本中使用get有问题,提示参数错误,无法使用。   查看了ftp的帮助ftp -?
[img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] G:>ftp -? [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] Transfers files to and from a computer running an FTP server service [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] (sometimes called a daemon). Ftp can be used interactively. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [-A] [host] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -v             Suppresses display of remote server responses. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -n             Suppresses auto-login upon initial connection. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -i             Turns off interactive prompting during multiple file [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]                  transfers. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -d             Enables debugging. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -g             Disables filename globbing (see GLOB command). [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -s:filename    Specifies a text file containing FTP commands; the [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]                  commands will automatically run after FTP starts. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -a             Use any local interface when binding data connection. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -A             login as anonymous. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   -w:buffersize  Overrides the default transfer buffer size of 4096. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   host           Specifies the host name or IP address of the remote [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]                  host to connect to. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] Notes: [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   - mget and mput commands take y/n/for yes/no/quit. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]   - Use Control-C to abort commands. [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]
发现 -i 参数可以去除mget的提示,经过测试,实现了如下脚本(使用了匿名登入,如果非匿名,可以修改登入脚本):
[img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo cd autoruns>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo mget *>>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo bye>>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] ftp -i -A -s:ftp.txt 10.1.103.10
   不过,这只是下载了目录中的文件,如果有子目录,那还需要用dir命令输出,并转向输出到文本,用find来提取目录,如:
[img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo cd autoruns>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo dir>>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo bye>>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] ftp -A -s:ftp.txt 10.1.103.10 |find "<DIR>">result.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] for /"tokens=2,3*" %%i in (result.txt) do echo %%k
  如有子文件夹,那就要深入编写了。   经过编写测试,实现如下脚本,运行环境WINXP SP2,运行通过,未载其它系统上测试过: 1、主要脚本ftpget.bat,更改前4个变量的相关信息,该脚本调用makeTree.bat,请参见2
[img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem FTP服务器地址 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] set host=10.1.103.10 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem FTP登入名,如果匿名不用改 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] set user=anonymous [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem FTP登入密码,如果匿名不用改 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] set pass=123456 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem 需要下载的FTP目录,如果下载子目录以分格 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] set dirname=目录1子目录 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] set homedir=%cd% [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem 生成FTP目录结构 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] del tree.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] start /cmd /c makeTree %dirname% 0 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] del result*.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] for /"delims=/" %%i in (tree.txt) do ( [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem 获取dirname的所有文件 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem ============================= [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] cd %homedir% [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] md %%i [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] cd /d %%i [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo %user%>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo %pass%>>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo cd %%i>>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem mget *.* 下载所有文件,但不能下载无扩展名的文件; [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem 如果使用mget * 可以下载所有文件,但会把子目录的文件也下载过来 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo mget *.*>>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo bye>>ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] ftp -i -A -s:ftp.txt %host% [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] del ftp.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem ============================== [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] ) [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] cd %homedir% [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] del tree.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]
2、maketree.bat,生成FTP目录树
[img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem 生成FTP目录结构 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem 调用方法 maketree dir1dir2 n (n>=1) [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem %1 == dir1dir2 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] rem %2 == n [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] set /a treetime=%2+1 [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo %1 >>tree.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo %user% >ftp%treetime%.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo %pass% >>ftp%treetime%.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo cd %1 >>ftp%treetime%.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo dir >>ftp%treetime%.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] echo bye >>ftp%treetime%.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] ftp -A -s:ftp%treetime%.txt %host% |find "<DIR>">result%treetime%.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] for /"tokens=2,3*" %%i in (result%treetime%.txt) do (start /cmd /c Maketree.bat %1%%k %treetime%) [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] del result%treetime%.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] del ftp%treetime%.txt [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img] [img]http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[/img]
    虽然已经实现,但仍然有小问题,就是mget *.* 不能下载无扩展名的程序;如果使用mget * 可以下载所有文件,但会把子目录的文件也下载过来。get在FTP脚本中出错也不知为何。 相关信息参考: [url=http://support.microsoft.com/default.aspx?scid=kb;zh-cn;96269]使用FTP 批处理脚本[/url],[url=http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/serverhelp/258062c8-790d-4772-a763-f8ebec886877.mspx]Ftp 子命令[/url]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部