windows bat脚本实现ftp自动下载 删除

现在有一个需求就是把远程某个文件下面的图片,下载到本地,并且删除下载成功的的文件,而且远程目录下的那个图片会随时增加。假设一下如果所有的脚本都写好了,那么就需要调用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.log

set 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! %%i
    REM 以5个文件为一组进行删除
    set /a tmp = !num! %% 5
    if !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.txtREM %1 代表第一个参数 %2代表第二个参数 依次类推
echo cd %3>>ftp.txt
REM 这里主要处理掉 file list 中的前后双引号
set tmp=%1
set "tmp=%tmp:"=%"
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自动下载 删除

时间: 2024-12-15 05:18:06

windows bat脚本实现ftp自动下载 删除的相关文章

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

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://369369.blog.51cto.com/319630/842341 Bat脚本处理ftp超强案例解说 前言:    公司有几百台windows服务器,每次程序更新,如果是一台台拷数据,只怕安排十个人,一天都不一定做得完,所以就必须研究个全自动更新方案来,于是就 想到了FTP,做个主FTP站,在几百台客户机上启动BAT脚本,每30秒检测一次,如果主站有更新程序,就自动下载更新,

[转]Bat脚本处理ftp超强案例解说

Bat脚本处理ftp超强案例解说 转自:http://369369.blog.51cto.com/319630/842341   前言:   公司有几百台windows服务器,每次程序更新,如果是一台台拷数据,只怕安排十个人,一天都不一定做得完,所以就必须研究个全自动更新方案来,于是就想到了FTP,做个主FTP站,在几百台客户机上启动BAT脚本,每30秒检测一次,如果主站有更新程序,就自动下载更新,几分钟内,上400台windows服务器,都可以全自动更新程序完毕,相当实用,现把当初研究BAT的

Windows和Linux之间ftp自动上传下载脚本

一.Windows主机自动从Linux ftp服务器下载文件 二.Linux主机自动从Windows ftp服务器下载文件 原文地址:http://blog.51cto.com/19940919/2073981

windows cmd ftp 自动下载

1.编写ftp的bat脚本: set year=%date:~0,4% set day=%date:~0,4%%date:~5,2%%date:~8,2% mkdir d:\ftp\%date:~0,4% mkdir d:\ftp\%date:~0,4%\%date:~0,4%%date:~5,2%%date:~8,2% del d:\ftp\ftpcmd.txt @echo open 172.18.73.122>>ftpcmd.txt @echo product1>>ftpcmd

windows FTP自动下载脚本

新建ftp.dat文件,内容如下 open xxx.xxx.xxx.xxxusernamepasswordcd    lcd x:\filesbinaryhashmget *.*bye 新建run.bat文件 ftp -s:ftp.dat执行run.bat即可 http://linuxinfo.blog.51cto.com/412748/98690

ftp自动下载

#!/bin/bash  #author: QingFeng #qq: 530035210 #blog: http://my.oschina.net/pwd/blog  #自动添加秘钥认证用户 #缺省的配置如下   logdir=/data/log/shell          #日志路径 log=$logdir/shell.log            #日志文件  is_font=1                #终端是否打印日志: 1打印 0不打印  is_log=1          

C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库

using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading; using

一个简单的windows bat脚本

今天有一个windows脚本的需求,以前完全没写过windows的命令,无奈之下写出了一个这么low的脚本,这里也记录一下方@echo off @rem 脚本需求: @rem 1.压缩包文件会存放在一个固定路径 @rem 2.解压这个文件 @rem 3.通过java命令,运行解压过后的jar包 @rem 4.获取程序的进程ID,并输出 @rem 5.自己带一个JAVA安装包,用这个包里面的java环境?? @rem 设置环境变量 SET StorageDir=E:\windows脚本\存储路径

C#实现开发windows服务实现自动从FTP服务器下载文件(自行设置分/时执行)

最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能.首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer来设置隔多长时间来下载.后来又想想了.用windwos服务来实现吧. 效果图: 执行的Log日志: INFO-2016/5/24 0:30:07--日志内容为:0/30/7进行time触发 INFO-2016/5/24 1:30:07--日志内容为:1/30/7进行time触发 INFO-2016/