现在有一个需求就是把远程某个文件下面的图片,下载到本地,并且删除下载成功的的文件,而且远程目录下的那个图片会随时增加。假设一下如果所有的脚本都写好了,那么就需要调用windows上的计划任务定时执行脚本就ok了,Linux上利用cronjob 同样可以做到。大体的实现思路如下,当然了不止这一种方式。

  1. 在远程服务器上搭建ftp server ,例如这里在远程服务上的 images 作为下载目录。搭建ftp server 最简单的方式就是用FileZilla Server 这个工具去搭建,很方便,零配置。
  2. 在client端编写 脚本,首先实现可以从远程服务器上下载,其次再把下载成功的文件到远程服务器上进行删除,这里的细节需要注意:

a.首先把下载完成的文件的列表写入到一个临时文件中 例如文件 filelist.tmp,同时把下载到临时目录中的文件移动到一个一个正式目录 例如 download 目录

b.其次删除文件的时候就按照这个 filelist.tmp 文件中文件list, 由于因windows下不能直接将参数传给ftp脚本函数,所以删除文件就采用分批删除,例如一次删除    10个文件,当然这个你可以自己零活控制 , 这里主要用到了ftp 命令中的 mdelete 这个方法,同时可以删除多个文件。

3. 然后根据你的需求,把这个脚本添加到任务计划中。

这个程序包含 2个 脚本 ,getfile.bat 和 removefile.bat

getfile.bat的代码如下:

@echo off
REM 配置基本盘符,主目录和文件存放目录
set BASE=d:
set BASE_PATH=D:\bat\ftp
set LOG_FILE=%BASE_PATH%\ftpgetfile.logset FLAG_FILE=%BASE_PATH%\tmp.tmp
set SA~VE_PATH=%BASE_PATH%\download
set TMP_PATH=%BASE_PATH%\temp
REM 远程的目录
set REMOTE_PATH=/images
REM 程序开始运行
echo =========================================================== >> %LOG_FILE%
set mydate=%date:~0,10% %time:~0,8%
echo "Program is running start time:%mydate%" >> %LOG_FILE%
%BASE%
if not exist %BASE_PATH% (mkdir %BASE_PATH%
)
if not exist %SA~VE_PATH% (mkdir %SA~VE_PATH%
)
if not exist %TMP_PATH% (mkdir %TMP_PATH%
)
cd %TMP_PATH%
REM 程序执行之前设置的标志位 为 0
echo 0 > %FLAG_FILE%
if not exist %SA~VE_PATH% (
echo 无法找到标志文件%SA~VE_PATH% >> %LOG_FILE%
goto _END
)
ftp -s:"%BASE_PATH%\getfile.ftp" >> %LOG_FILE%
echo 本次获得的文件如下:>> %LOG_FILE%
dir /B %TMP_PATH%\*.* > %BASE_PATH%\filelist.tmp
setlocal EnableDelayedExpansion
set count=0
FOR /F  "delims=" %%i IN (%BASE_PATH%\filelist.tmp) DO (set /a count+= 1
)
if %count% == 0 (echo "NO files need download!" >> %LOG_FILE%exit
)
dir /B %TMP_PATH%\*.* >> %LOG_FILE%
REM 把下载的文件拷贝到其它的目录
move /Y %TMP_PATH%\*.* %SA~VE_PATH%\
set num=1
set filelist=
FOR /F "delims=" %%i IN (%BASE_PATH%\filelist.tmp) DO (set filelist=!filelist! %%iREM 以5个文件为一组进行删除set /a tmp = !num! %% 5if !tmp! == 0 (call %BASE_PATH%\removefile.bat "!filelist!" %LOG_FILE% %REMOTE_PATH%set filelist=) else (REM 如果文件的总个数与 num的数相等,并且不能达到5个文件为一组,那么就直接删除if !count! LEQ !num! (call %BASE_PATH%\removefile.bat "!filelist!" %LOG_FILE% %REMOTE_PATH%set filelist=))set /a num+= 1
)
endlocal
REM 程序执行完成之后设置标志位为1
echo 1 > %FLAG_FILE%
REM del %BASE_PATH%\filelist.tmp 删除下载的文件列表
set mydate=%date:~0,10% %time:~0,8%
echo =========================================================== >> %LOG_FILE%
echo "Program is running end:%mydate%" >> %LOG_FILE%
exit

这个脚本需要一个登录ftp服务器的信息,getfile.ftp 的内容下:

open your ftp server IP
USER
PASSWORD
cd  your ftp floder
prompt off
mget *.*
bye
quit
exit

removefile.bat 脚本的内容如下:

echo open 121.40.123.74>ftp.txt
echo mht.cherry>>ftp.txt
echo mht.cherry>>ftp.txt
REM %1 代表第一个参数 %2代表第二个参数 依次类推
echo cd %3>>ftp.txt
REM 这里主要处理掉 file list 中的前后双引号
set tmp=%1
set "tmp=%tmp:"=%"
REM 如果要关闭交互,那么就用 prompt off
REM echo prompt off>>ftp.txt
REM mdelete 删除的格式 mdelete 1.txt 2.txt 3.txt
echo mdelete %tmp%>>ftp.txt
echo bye>>ftp.txt
echo quit>>ftp.txt
echo exit>>ftp.txt
ftp -i -s:ftp.txt >>%2
del ftp.txt

到这里,功能已经完成。接下来就是把getfile.bat 这个脚本添加到 windows 计划任务中,这个我在这里就不说明的,如果不熟悉可以在网上搜索看看。

windows bat脚本实现ftp自动下载 删除相关推荐

  1. windows下定时利用bat脚本实现ftp上传和下载

    前言: 工作中可能会遇到以下情况,利用windows作为中转,来实现两台linux服务器的文件传输. 实现步骤: 1.FTP上传和下载的bat脚本. 脚本分为两部分:可执行bat脚本和ftp命令文件: ...

  2. filezilla定时上传_windows下定时利用bat脚本实现ftp上传和下载

    前言: 工作中可能会遇到以下情况,利用windows作为中转,来实现两台linux服务器的文件传输. 实现步骤: 1.FTP上传和下载的bat脚本. 脚本分为两部分:可执行bat脚本和ftp命令文件: ...

  3. BAT脚本实现FTP文件自动传输

    BAT脚本实现FTP文件自动传输 第一个脚本代码,用于输入用户名密码和路径 open 192.168.100.5 ftp 123123 cd pub binary ::批量传输 ::mput D:\t ...

  4. bat脚本登陆ftp服务器

    用bat脚本登录ftp服务器,下载指定文件. 第一次脚本,有问题,你发现了么? 由于每个">>"重定向符号之前都习惯用空格(python style),导致写道ftp. ...

  5. ftp 自动下载文件并解压

    前几天为了工作想将Ftp文件自动下载解压然后将数据导入到excel,这样上班后就可以直接应用数据了,开始想看好多办法,比如PHP VB 等,但是最后都觉得不太好用,采用了系统自带的DOS 系命令,不过 ...

  6. windows bat脚本编写

    windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码 ...

  7. windows bat脚本注册成服务

    windows bat脚本注册成服务 絮叨:最近在使用derby数据库编写项目,但是单机版本只能当前项目连接derby,想要工具连接项目中的derby只能开启网络版模式,网络版模式服务启动方式是个ba ...

  8. windows .bat脚本检测文件更新,并复制

    最近需要检测文件夹中文件是否更新,然后复制到指定路径 ,使用的是windows  bat脚本 记录一下 ,代码如下 mkdir 001 002 003 004 005 006 007 008 009 ...

  9. Bat脚本处理ftp超强案例解说

    转自:http://369369.blog.51cto.com/319630/842341 前言:    公司有几百台windows服务器,每次程序更新,如果是一台台拷数据,只怕安排十个人,一天都不一 ...

  10. windows bat脚本教程

    第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小知识: ...

最新文章

  1. Oracle TNS协议中数据包的内部结构
  2. [0618]Tyvj1128中文大写数字
  3. NHibernate 与Oracle 点滴
  4. 钟表的用途和作用_液体三氯化铁用途及使用方法
  5. anaconda moviepy_Anaconda和PyCharm的详细安装步骤~小白专用,手把手教学
  6. python学习之老男孩python全栈第九期_day009之初始函数初窥
  7. Python:如何安装whl文件
  8. Java程序设计以及实验指导 实验笔记
  9. 教你炒股票25:回复(1)
  10. 嵌入式系统开发-麦子学院(2)——开发环境的搭建
  11. 行列式键盘+共阴极数码管显示
  12. CronTrigger(重要,非常强大)
  13. php vld 安装,PHP性能之语言性能优化:vld
  14. chrome浏览pdf 字体变了
  15. TWS真无线蓝牙耳机自动化测试设备助力TWS自动化批量生产
  16. 日语日常信函书信写作范文(6篇)
  17. (纪中)2431. 移动奶牛(herding)
  18. 读书笔记《Linux那些事儿之我是USB》
  19. 校招前端二面常考react面试题(边面边更)
  20. 【WY】数据分析 — 空间数据阶段一 :进阶语法 三 —— 空间柱状图

热门文章

  1. 苹果手机来电归属地_手机号码归属地能否取消?工信部回应...
  2. 不用传感器的指南针android app,Android 利用方向传感器实现指南针具体步骤
  3. 判断矩形相似C语言,C++判断矩形相交的方法
  4. 大伽「趣」说AI:在多个场景中的AI落地实践
  5. 整数集合划分且满足|n1-n2|最小且|S1-S2|最大
  6. 注册表被禁用了怎么办?
  7. Java实验9 矩形类的定义与封装
  8. UVALive-3713 Astronauts (2-SAT)
  9. Docker 使用手册
  10. FTP上传文件0字节问题