设为首页 收藏本站
查看: 1028|回复: 0

[经验分享] 用Windows批处理文件封装ftp文件下载

[复制链接]

尚未签到

发表于 2015-11-6 07:57:23 | 显示全部楼层 |阅读模式
  这几天,工作中需要从远端ftp服务器下载并分析大量数据文件。数据文件的分析没什么可说的,就是字串解析,要说说ftp文件下载。
要下载ftp服务器上的文件,方法有多种,如:
1. 用Socket建立链接,然后按照FTP协议,进行命令字交互,这相当于实现一个小的ftp客户端程序;
2. 用WinSDK中的WinINet, 里面提供了FtpGetFile这样的一系列方法,用于ftp客户端编程;
3. 使用类似CuteFTP这样的客户端软件;
4. 使用控制台ftp命令;

  使用cuteftp等软件,需要安装软件不说,还不便于与数据处理程序协调工作,所以不行。剩下三种方法都可以,但前两种,写程序工作量比较大,那就看看最后一个方法:使用控制台ftp命令。
  常用的ftp命令有open, user, get, mget, put, quit等,最重要一点,ftp命令(实际上也是一客户端程序)支持命令脚本,也就是他可以根据你设计的脚本进行链接和下载。
一个简单的脚本如下:
----------------------------
open theftpserver
user admin 123456
get thefile.dat
quit
----------------------------
将这样的脚本保存后(如down.ftp),用ftp命令直接调用即可:
c:/blog/csdn/guanzhongs>ftp -n < down.ftp

  这样看来,使用ftp命令,结合Windows的批处理文件,完全可以把文件下载部分解决。
  还有一问题:下载的文件名是不确定的,但是ftp命令中需要指定确定的文件名。解决这个问题的方法是,在批处理文件中动态生成ftp脚本文件,然后调用ftp命令执行它。
  下面是一个例子,已经在WindowsXP下测试通过。这个例子可以接受服务器名,用户名,用户密码,下载文件名为参数,然后将文件下载到本地目录。同时记录简单的log信息。
    ----------------------------------------------------------------------------
-- getfiles.bat
----------------------------------------------------------------------------

  @echo off
  rem /////////////////////////////////////////////////////////////////
rem // guanzhong 2006-1-25
rem // Blog :
http://blog.iyunv.com/guanzhongs
rem // batch file for download file(s) from remote server
rem // Command line :
rem //  getfiles <server> <user> <password> <remotefilename>
rem /////////////////////////////////////////////////////////////////

  if &quot;%1&quot;==&quot;&quot; goto Usage
if &quot;%1&quot;==&quot;/?&quot; goto Usage
if &quot;%2&quot;==&quot;&quot; goto Usage
if &quot;%3&quot;==&quot;&quot; goto Usage
if &quot;%4&quot;==&quot;&quot; goto Usage

  set ftpfile=getfiles.tmp
set logfile=getfiles.log

  rem // 生成ftp下载脚本
  echo open %1 > &quot;%ftpfile%&quot;
echo user %2 %3 >> &quot;%ftpfile%&quot;
echo bin >> &quot;%ftpfile%&quot;
echo prompt >> &quot;%ftpfile%&quot;
echo mget %4 >> &quot;%ftpfile%&quot;
echo quit >> &quot;%ftpfile%&quot;

  rem // 记录log
  echo -------------------------------- >> &quot;%logfile%&quot;
date /t >> &quot;%logfile%&quot;
time /t >> &quot;%logfile%&quot;
echo -------------------------------- >> &quot;%logfile%&quot;

  rem // 下载文件
ftp -n < &quot;%ftpfile%&quot; >> &quot;%logfile%&quot;

  rem // 删除临时脚本
del &quot;%ftpfile%&quot;

  echo getfiles done! >> &quot;%logfile%&quot;
  
goto End
  :Usage
echo Get file(s) from the remote server, support multi get.
echo Usage:
echo getfiles [server user password remotefilename]

  
:End
  
@echo on
  
----------------------------------------------------------------------------

  上例中,批处理的第四个参数是所要下载的文件名,这个文件名与dos命令中一样,支持通配符,也就是说,这个批处理文件支持下载批量文件,如:
c:/blog/csdn/guanzhongs>getfiles 127.0.0.1 admin 123456 *.jpg
可以把远程目录下的所有jpg文件下载过来。

  另外,上例中ftp脚本文件中多了两行内容:
echo bin >> &quot;%ftpfile%&quot;
echo prompt >> &quot;%ftpfile%&quot;
第一行是指定用二进制方式传输,也可以用ASCII方式;
第二行是指定如果有文件覆盖时,不需要提示,这样就不会打断批处理文件的执行了。

  有了这个getfiles.bat文件,在程序中下载文件,只需要ShellExecute一下就行了。
  对于Linux系统,思路是类似的,而且Linux系统的Shell功能非常强大,能够实现更加完善的功能。
  
完成上面工作,你需要了解:
DOS/Window Console命令,及批处理脚本编写。
控制台Ftp命令的使用。

  

             版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135612-1-1.html 上篇帖子: 关于ftp中root用户连接时500 OOPS: cannot change directory:/root报错 ... 下篇帖子: 解决ftp上传遇到的227错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表