批量删除 FTP 上超过 x 天的文件

Gra*_*per 4 windows ftp batch-file

为本地找到了几种解决方案,但需要一种用于 FTP 操作:

我有一个每日批处理脚本来在本地备份 MySQL 数据库,但是我也将它们 ftp 到备份服务器。

在本地,我使用forfiles删除超过 14 天的文件:

forfiles -p "C:\whatever" -s -m *.* -d 14 -c "cmd /c del @path"`
Run Code Online (Sandbox Code Playgroud)

我想在 FTP 上做同样的事情,一旦最新的备份文件被转储到运行在 Windows Server 2008 R2 上的 FTP 服务器中。

如何扩展我的批处理文件以执行此操作?

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
Run Code Online (Sandbox Code Playgroud)

PA.*_*PA. 5

  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]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 准备ftp删除脚本

    echo user [ftp username]>ftpdel.txt
    echo [ftp password]>>ftpdel.txt
    
    Run Code Online (Sandbox Code Playgroud)
  3. 处理清单

     for /f "tokens=6,7,8,*" %%a in (ftplist.txt) do (
        echo %%d
     )
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在循环内,提取文件日期。

    echo %%c %%a %%b - %%d
    
    Run Code Online (Sandbox Code Playgroud)

    并将月份名称转换为数字

    call :month %%a
    
    Run Code Online (Sandbox Code Playgroud)

    您可以使用http://www.dostips.com/DtTipsStringManipulation.php 中的例程

  5. 在循环内,将日期转换为自今天起的天数

    call :days %%c %month% %%b
    
    Run Code Online (Sandbox Code Playgroud)

    这是对使用 Fliegel-Van Flandern 算法计算天数的例程的调用。有关详细信息和实现,请参阅此 SO 问题如何检查 Windows 批处理脚本中文件的时间戳创建?

  6. 最后,在循环内,比较结果数字,如果它大于 14,则将文件添加到文件中以删除 ftp 脚本

    IF !days! GEQ 14 echo DEL %%d >>ftpdel.txt
    
    Run Code Online (Sandbox Code Playgroud)
  7. 完成ftp del脚本并执行

    echo quit>>ftpdel.txt
    ftp -n -s:ftpdel.txt [myserver.com]
    
    Run Code Online (Sandbox Code Playgroud)


Mar*_*ryl 5

使用内置的 实现很麻烦ftp.exe,正如@PA 的很好的答案。显示。

您最好使用一些更强大的可编写脚本的 3rd 方 FTP 客户端。


例如使用WinSCP FTP 客户端,它就像:

winscp.com /ini=nul /log=delete.log /command ^
    "open ftp://username:password@ftp.example.com/" ^
    "rm /remote/path/*<14D" ^
    "exit"
Run Code Online (Sandbox Code Playgroud)

请参阅具有时间限制的文件掩码

(我是 WinSCP 的作者)