[windows]快速从ftp下载最新软件包的批处理脚本

背景

由于敏捷开发,快速迭代,我们项目一天会有三个版本,也就意味着我一天要去获取三次软件包。我负责服务端开发,所以我经常需要去拿最新的客户端。我们的客户端放置在一个公共的ftp上面。每天频繁登陆ftp下载,或者使用ftp工具,每次都要点击同步,都不太方便。如果在linux下就好了,然而在windows也是可以运行脚本的,何不尝试下呢。

@echo off
rem for download file
rem ftp config
rem ip login_name password remote_dir

set "ftp_ip=192.168.0.1"
set "ftp_user=admin"
set "ftp_pass=123456"
set "ftp_path=/"

set "f_tmp=tmp"
set "f_info=tmp\tmp_info.dat"
set "f_list=tmp\tmp_list.dat"

rd /s /q pack
mkdir %f_tmp%

echo open %ftp_ip% > %f_info%
echo user %ftp_user% >> %f_info%
echo %ftp_pass%>> %f_info%
echo prompt >> %f_info%
echo binary >> %f_info%
echo cd %ftp_path% >> %f_info%
echo ls . %f_list% >> %f_info%
echo lcd %f_tmp% >> %f_info%
echo disconnect >> %f_info%
echo bye >> %f_info%

ftp -v -n -s:%f_info%

for /f "delims=" %%i in ('type "%f_list%"') do (
    set "target_7z=%%i"
)

echo open %ftp_ip% > %f_info%
echo user %ftp_user% >> %f_info%
echo %ftp_pass%>> %f_info%
echo prompt >> %f_info%
echo binary >> %f_info%
echo cd %ftp_path% >> %f_info%
echo lcd %f_tmp% >> %f_info%
echo get %target_7z%>> %f_info%
echo disconnect >> %f_info%
echo bye >> %f_info%

ftp -v -n -s:%f_info%

call tools\7z\x64\7za.exe x %f_tmp%\%target_7z%

rd /s /q %f_tmp%

exit

批处理脚本

运行脚本

逐步解释

获取文件列表

echo open %ftp_ip% > %f_info%
echo user %ftp_user% >> %f_info%
echo %ftp_pass%>> %f_info%
echo prompt >> %f_info%
echo binary >> %f_info%
echo cd %ftp_path% >> %f_info%
echo ls . %f_list% >> %f_info%
echo lcd %f_tmp% >> %f_info%
echo disconnect >> %f_info%
echo bye >> %f_info%

ftp -v -n -s:%f_info%

这部分代码主要有以下几个作用:

    1. 将ftp的命令写入到文件;
    2. 在ftp上获取对应目录的文件列表,并写到本地文件下。

获取最新的一个文件

for /f "delims=" %%i in ('type "%f_list%"') do (
    set "target_7z=%%i"
)

然后循环遍历文件列表,最终获取到最后一个列表(也就是最新的文件名)。

下载最新文件

echo open %ftp_ip% > %f_info%
echo user %ftp_user% >> %f_info%
echo %ftp_pass%>> %f_info%
echo prompt >> %f_info%
echo binary >> %f_info%
echo cd %ftp_path% >> %f_info%
echo lcd %f_tmp% >> %f_info%
echo get %target_7z%>> %f_info%
echo disconnect >> %f_info%
echo bye >> %f_info%

ftp -v -n -s:%f_info%

有了文件名,我们就可以再执行一次ftp命令,下载我们最新的文件了。以上就实现了动态下载最新文件了。

解压

这边我们使用的软件包是7z打包的。所以也要下载7z解压工具。
官方地址:http://www.7-zip.org/
然后下载到命令行版,放置到任意可读取目录就可以了。

call tools\7z\x64\7za.exe x %f_tmp%\%target_7z%

后话

平常习惯了在linux下倒腾。可以写些脚本做些繁琐的事情,但是在windows经常就傻眼了。可视化的东西是有很多好处,但是也有些弊端。批处理脚本虽然不好用,但也并不是不可用。很多时候也可以带来很大的方便。当然会python、ruby这些脚本语言其实也是完全可以满足的。毕竟现在这年头批处理这种东西用的越来越少了。windows shell也可以,但是感觉也不太好用。

参考资料

时间: 2024-09-29 20:55:35

[windows]快速从ftp下载最新软件包的批处理脚本的相关文章

实现Windows XP下VPN连接自动配置的批处理脚本

前几天在完成了TMG_VPN的配置后,一直在想能否更简化用户的操作呢?最好是通过脚本的方式让用户不用做任何配置,只需点击就可以完成对所有VPN的配置,经过一段时间的编写和修改后,今天晚上终于完成了Window XP下VPN自动配置的脚本,以前没怎么写过,第一次写,遇到了不少问题,不过经过自己的修改后已经完成了如下功能: 1.自动创建所有VPN服务器. 2.创建所有VPN服务器对应的桌面快捷方式. 3.生成PBK文件的快捷方式. 4.对已有VPN连接进行校对,判断是否已经有过配置操作. 5.配置完

实现FTP整站上传的批处理代码_DOS/BAT

@echo off rem 设置FTP服务器地址 set ftpIP=192.168.0.2 rem 设置FTP用户名 set ftpUser=MyUser rem 设置FTP密码 set ftpPass=MyPass rem 设置待上传的本地文件夹目录 set UpFolder=C:/test rem 生成待上传的本地文件夹列表 type nul>%temp%/FolderList.txt for /r "%UpFolder%" %%a in (.) do ( set Full

Windows Azure SDK for .NET最新版本功能改进说明

Windows Azure SDK for .NET的最新版本有很多大的功能改进,包括 .NET4.5 / Windows Server 2012 (OS Family 3)在 Web/Worker Role上获得支持 VS工具-效率提升 Web/Worker Role的缓存- General availability Storage – 新工具和客户端类库 Service Bus – 升级的客户端类库和工具 此外,现在Windows Azure PowerShell (单独下载)可以支持Ser

用commons-net ftp上传excel或者word文件到windows下的FTP服务器,文件会打不开

问题描述 我使用commons-netftp做了一个ftp客户端,使用上没出现什么问题,就是当上传excel到windows下的FTP服务器上后,打开excel文件时出现"该文件可能是只读的,或者您要访问的位置是只读的,或者文件所在的服务器没响应",word也是这样.我检查过那些设置,上传模式是使用binary,而且我上传音频文件和PDF之类的都可以打开.后来我尝试把excel文件上传到linux下的FTP服务器,然后下载下来发现可以打开为什么windows下不行,linux下可以呢?

如何刻录一张使用apt或synaptic下载的软件包CD光盘

本文将描述如何刻录一张带使用apt或synaptic下载的软件包的CD光盘.这张CD光盘将会是一张可以直接为其它机器的synaptic或apt-cdrom所用的软件仓库.例如,我将演示如何制作一张包含所有以下载的安全升级的CD光盘.除了添加新的apt PGP keys以外,这张CD光盘的使用者将无需做任何的命令行操作. Step 1: Install the apt-move package(安装apt-move软件包)&http://www.aliyun.com/zixun/aggregati

ECS windows 2012 IIS FTP外网无法连接解决案例一则及相关资料汇总

故障现象:安全组已增加端口,IIS里已安装FTP服务. 在ECS上通过浏览器进行FTP方式进行外网IP访问时,可以连接,但弹出没有文件夹访问权限的提示.在外网进行FTP连接,则直接无法访问. 说明: 1.ECS上弹出权限提示,是因为浏览器方式访问是被动模式,需要用FTP软件或其他IDE自带的FTP功能,并设置为主动模式才可以正常连接. 2.外网无法访问是防火墙里的FTP流入规则默认指定了限SVCHOST.EXE程序通过,但FTP连接需要其他程序的参与. 解决方法: 在防火墙里增加一条FTP流入规

java,有很多程序可以在运行的时候下载最新版本,然后下次启动时,自动切到新版,是怎么实现的

问题描述 java,有很多程序可以在运行的时候下载最新版本,然后下次启动时,自动切到新版,是怎么实现的 下载文件没问题,可是,程序正在运行,不可以删除文件,新的文件怎么覆盖旧文件 解决方案 http://download.csdn.net/download/ycb1689/4651910 不可以删除,但是可以对运行的程序改名

ftp-java 单纯使用socket实现FTP下载功能

问题描述 java 单纯使用socket实现FTP下载功能 FTP服务器目录: F:/FTP / b a.txt / c b.txt / c.txt (没有加上后缀txt的都是文件夹)假设客户端需要下载整个F:/FTP/b 问题:服务器和客户端用什么方式来同步输出流和输入流(局域网两台机子测试) 解决方案 Java有一个FTPClient的包用来处理ftp的上传.下载的.有相应的目录判断方法.

Windows Server 2008 R2下载附官方序列号

相信大家都已经知道了Windows 7的公开发售日期,在台北Computex 2009大会上微软OEM业务全球副总裁http://www.aliyun.com/zixun/aggregation/10820.html">Steve Guggenheimer和Windows业务高级副总裁Bill Veghte宣布Windows 7将于2009年10月22日开始全球公开发售(GA),RTM版本由之前宣布的8月中旬提前到了7月底. 那么其服务器版本Windows Server 2008 R2是否