[windows]快速從ftp下載最新軟件包的批處理腳本


背景

由於敏捷開發,快速迭代,我們項目一天會有三個版本,也就意味着我一天要去獲取三次軟件包。我負責服務端開發,所以我經常需要去拿最新的客戶端。我們的客戶端放置在一個公共的ftp上面。每天頻繁登陸ftp下載,或者使用ftp工具,每次都要點擊同步,都不太方便。如果在linux下就好了,然而在windows也是可以運行腳本的,何不嘗試下呢。

完整代碼

 1 @echo off
 2 rem for download file
 3 rem ftp config 
 4 rem ip login_name password remote_dir
 5 
 6 set "ftp_ip=192.168.0.1"
 7 set "ftp_user=admin"
 8 set "ftp_pass=123456"
 9 set "ftp_path=/"
10 
11 set "f_tmp=tmp"
12 set "f_info=tmp\tmp_info.dat"
13 set "f_list=tmp\tmp_list.dat"
14 
15 rd /s /q pack
16 mkdir %f_tmp%
17 
18 echo open %ftp_ip% > %f_info%
19 echo user %ftp_user% >> %f_info%
20 echo %ftp_pass%>> %f_info%
21 echo prompt >> %f_info%
22 echo binary >> %f_info%
23 echo cd %ftp_path% >> %f_info%
24 echo ls . %f_list% >> %f_info%
25 echo lcd %f_tmp% >> %f_info%
26 echo disconnect >> %f_info%
27 echo bye >> %f_info%
28 
29 ftp -v -n -s:%f_info%
30 
31 
32 for /f "delims=" %%i in ('type "%f_list%"') do (
33     set "target_7z=%%i"
34 )
35 
36 echo open %ftp_ip% > %f_info%
37 echo user %ftp_user% >> %f_info%
38 echo %ftp_pass%>> %f_info%
39 echo prompt >> %f_info%
40 echo binary >> %f_info%
41 echo cd %ftp_path% >> %f_info%
42 echo lcd %f_tmp% >> %f_info%
43 echo get %target_7z%>> %f_info%
44 echo disconnect >> %f_info%
45 echo bye >> %f_info%
46 
47 ftp -v -n -s:%f_info%
48 
49 call tools\7z\x64\7za.exe x %f_tmp%\%target_7z%
50 
51 rd /s /q %f_tmp%
52 
53 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也可以,但是感覺也不太好用。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM