背景

由于敏捷开发,快速迭代,我们项目一天会有三个版本,也就意味着我一天要去获取三次软件包。我负责服务端开发,所以我经常需要去拿最新的客户端。我们的客户端放置在一个公共的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也可以,但是感觉也不太好用。

参考资料

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

  1. 批处理:Windows主机通过FTP下载远程Linux主机上文件

    问题:在Windows上怎么写个批处理把多个文件FTP依次下载到本地某个目录. 批处理脚本示例: @echo off title Download db files. Don't close it!! ...

  2. FTP整站上传的批处理脚本

    一个FTP整站上传的批处理代码.例子: @echo off rem 设置FTP服务器地址 set ftpIP=192.168.0.2 rem 设置FTP用户名 set ftpUser=MyUser r ...

  3. windows快速搭建FTP工具Serv-U FTP Server

    本文介绍一个简单的FTP工具,当然windows系统自带FTP工具,但是配置方法没有第三方工具来的简单可操作性好. 此工具用于搭建FTP环境,对于需要测试FTP上传功能具有极大帮助.例如球机抓拍图片上 ...

  4. 快速启动FTP下载服务器

    nohup python -m SimpleHTTPServer 8000  > myout.file 2>&1 &

  5. windows下oracle数据库定时备份与压缩批处理脚本(win7/win2008亲测通过)

    第一种方式:全备份,并直接覆盖原来的备份文件,固定命名. 脚本: @echo off exp system/a123@HZPG file=e:\db_backup\oradata.dmp log=e: ...

  6. EasyNVR摄像机H5流媒体服务器在windows上批处理脚本自动以管理员权限运行

    很多时候, 我们需要以管理员权限来运行批处理脚本, 比如操作 windows 服务. EasyNVR 中提供安装服务的批处理脚本, 运行这个bat文件, 自动将 EasyNVR 以 windows 服 ...

  7. ❝ Windows系统的FTP上传下载脚本 ❞

    运行环境:windows 脚本功能:从目标系统下载数据库备份文件*.dmp 执行方法:windows任务计划定时调用文件ftp.bat 文件1:ftp.bat echo 开始备份日期: >> ...

  8. Windows下通过FTP自动上传和下载动态文件名

    某个项目中每天会生成一个以文件名+日期.rar文件,如bcpdata2012-08-31.rar文件,动态的部分为日期部分,在windows环境变量中用 %date:~0,10% 表示,这个文件生成后 ...

  9. windows中ftp下载脚本(bat+vb)

    做了个ftp下载脚本: ftpdownload.bat @rem 注释:从ftp服务器每小时下载北向性能文件的脚本 @rem 用vb脚本取昨天 for /f %%a in ('cscript //no ...

随机推荐

  1. 使用pandas处理数据并绘图的例子

    import sys import os import re import datetime import csv def get_datetime(record): request_time = & ...

  2. (转)原始图像数据和PDF中的图像数据

    比较原始图像数据和PDF中的图像数据,结果见表1.1.表1.1中各种“解码器”的解释见本文后续的“PDF支持的图像格式”部分,“PDF中的图像数据”各栏中的数据来自开源的PdfView.如果您有兴趣查 ...

  3. cocos2dx loading界面 预加载资源 与 资源释放

    预加载图片: 1.CCTextureCache::sharedTextureCache()->addImage("icon.png"); 2.CCTextureCache:: ...

  4. php源码之计算两个文件的相对路径

    <?php //计算出两个文件的相对路径即path2相对于$path1的相对路径 // http://www.manongjc.com/article/1342.html function ge ...

  5. sql(转自http://www.imooc.com/article/2325)

    http://www.imooc.com/article/2325

  6. 三、Distributing Maya Plugins

    For example, a fully implemented render utility node will have at least three files: the plug-in fil ...

  7. yum install mysql

    rpm -qa|grep -i mysqlmysql-libs-5.1.52-1.1.alios6.1.x86_64mysql-5.1.52-1.1.alios6.1.x86_64mysql-deve ...

  8. SQLSERVER | 查询数据库中所有的表的名字 | 查询数据库中的所有数据库名

    SQLSERVER 1.查询某个数据库中所有的表名:  SELECT Name FROM SysObjects Where XType='U' ORDER BY Name 2.查询数据库中的所有数据库 ...

  9. 【Python】 sorted函数

    我们需要对List.Dict进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本方法2.用built-in函数so ...

  10. dll 导出函数名的那些事

    dll 导出函数名的那些事 关键字: VC++  DLL  导出函数 经常使用VC6的Dependency或者是Depends工具查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导 ...