windows bat指令碼實現ftp自動下載 刪除

來源:互聯網
上載者:User

標籤:style   blog   color   io   檔案   for   ar   art   

現在有一個需求就是把遠程某個檔案下面的圖片,下載到本地,並且刪除下載成功的的檔案,而且遠程目錄下的那個圖片會隨時增加。假設一下如果所有的指令碼都寫好了,那麼就需要調用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 offREM 配置基本盤符,主目錄和檔案存放目錄set BASE=d:set BASE_PATH=D:\bat\ftpset LOG_FILE=%BASE_PATH%\ftpgetfile.logset FLAG_FILE=%BASE_PATH%\tmp.tmpset SA~VE_PATH=%BASE_PATH%\downloadset TMP_PATH=%BASE_PATH%\tempREM 遠端目錄set REMOTE_PATH=/imagesREM 程式開始運行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 程式執行之前設定的標誌位 為 0echo 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 EnableDelayedExpansionset count=0FOR /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=1set 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 程式執行完成之後設定標誌位為1echo 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 USERPASSWORDcd  your ftp floderprompt offmget *.*byequitexit

removefile.bat 指令碼的內容如下:

echo open 121.40.123.74>ftp.txtecho mht.cherry>>ftp.txtecho mht.cherry>>ftp.txt
REM %1 代表第一個參數 %2代表第二個參數 依次類推echo cd %3>>ftp.txtREM 這裡主要處理掉 file list 中的前後雙引號set tmp=%1set "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.txtecho quit>>ftp.txtecho exit>>ftp.txtftp -i -s:ftp.txt >>%2del ftp.txt

到這裡,功能已經完成。接下來就是把getfile.bat 這個指令碼添加到 windows 計劃任務中,這個我在這裡就不說明的,如果不熟悉可以在網上搜尋看看。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.