2012-03-08 46 views
3

發現了幾個解決方案,爲當地的老,但需要一個FTP行動:批量刪除文件放在FTP x天

我每天批處理腳本備份MySQL數據庫在本地,但我也是其中的ftp到備份服務器。

在當地,我使用forfiles刪除14天以上文件:

forfiles -p "C:\whatever" -s -m *.* -d 14 -c "cmd /c del @path"` 

同樣我想這樣做的FTP,一旦最新的備份文件轉儲到FTP服務器的Windows Server 2008上運行R2。

如何擴展我的批處理文件以執行此操作?

cd\[path to directory where files are saved] 
echo off 
echo user [ftp username]>ftpup.dat 
echo [ftp password]>>ftpup.dat 
echo binary>>ftpup.dat 
echo put [FullBackup.%backupdate%.zip]>>ftpup.dat 
echo quit>>ftpup.dat 
ftp -n -s:ftpup.dat [myserver.com] 
del ftpup.dat 
+0

我說,這是Windows批處理..爲什麼PowerShell的?對不起,困惑。是的,我想擴展該批處理腳本 – Grashopper 2012-03-09 10:52:03

+0

您已將它標記爲PowerShell – 2012-03-09 10:53:19

回答

4
  1. 捕獲你有興趣

    echo user [ftp username]>ftpdir.txt 
    echo [ftp password]>>ftpdir.txt 
    echo dir . ftplist.txt >>ftpdir.txt 
    echo quit>>ftpdir.txt 
    ftp -n -s:ftpdir.txt [myserver.com] 
    
  2. 文件列表準備FTP腳本刪除

    echo user [ftp username]>ftpdel.txt 
    echo [ftp password]>>ftpdel.txt 
    
  3. 進程列表

    for /f "tokens=6,7,8,*" %%a in (ftplist.txt) do (
        echo %%d 
    ) 
    
  4. 在循環內部,提取文件日期。

    echo %%c %%a %%b - %%d 
    

    ,改造月份名稱爲若干

    call :month %%a 
    

    你可以使用在http://www.dostips.com/DtTipsStringManipulation.php

  5. 循環內發現常規,轉換日期爲天數從今天起

    call :days %%c %month% %%b 
    

    這是一個調用例程com使用Fliegel-Van Flandern算法來說明這些日子。詳見與實施How can I check the time stamp creation of a file in a Windows batch script?

  6. 最後,在循環中,比較所產生的數量這太問題,如果它比,也就是說,14越大,文件添加到該文件刪除FTP腳本

    IF !days! GEQ 14 echo DEL %%d >>ftpdel.txt 
    
  7. 完成FTP腳本德爾並執行

    echo quit>>ftpdel.txt 
    ftp -n -s:ftpdel.txt [myserver.com] 
    
4

這是笨重與內置實施0,非常好answer by @PA.顯示。

您最好使用一些功能更強大的可編寫腳本的第三方FTP客戶端。


例如與WinSCP FTP client,這是微不足道的:

winscp.com /ini=nul /log=delete.log /command^
    "open ftp://username:[email protected]/"^
    "rm /remote/path/*<14D"^
    "exit" 

file masks with time constraints

(我的WinSCP的作者)

+0

這是完美的刪除舊東西,而無需事先列出它們 – heXer 2017-09-16 19:02:48