windows - Batch slette filer på FTP ældre end x dage

Indlæg af Hanne Mølgaard Plasc

Problem



Fandt flere løsninger til lokale, men har brug for en til FTP-handling:


Jeg har et daglig batch script til backup af MySQL databaser lokalt, men jeg har også ftp dem til en backup server.


Lokalt bruger jeg forfiles for at slette filer ældre end 14 dage:


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


Det samme jeg gerne vil gøre på FTP, når de nyeste backup-filer er dumpet til FTP-serveren, der kører på Windows Server 2008 R2.


Hvordan udvider jeg min batchfil til at gøre denne handling?


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

Bedste reference



  1. Indtast listen over filer, du er interesseret i


    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. Forbered scriptet for ftp sletning


    echo user [ftp username]>ftpdel.txt
    echo [ftp password]>>ftpdel.txt
    

  3. behandler listen


     for /f "tokens=6,7,8,*" \%\%a in (ftplist.txt) do (
        echo \%\%d
     )
    

  4. inde i løkken, hent fildatoen.


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


    Og omdanne månedens navn til et nummer


    call :month \%\%a
    


    du kan bruge den rutine, der findes i http://www.dostips.com/DtTipsStringManipulation.php[14]

  5. inde i løkken, omdanne datoen til et antal dage siden i dag


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


    Dette er et opkald til en rutine, der beregner dagene ved brug af Fliegel-Van Flanderns algoritme. Se denne SO spørgsmål for detaljer og implementering Hvordan kan jeg kontrollere tidsstempel oprettelse af en fil i et Windows-batch script?

  6. og til sidst inde i løkken, sammenlign det resulterende tal, hvis det er større end, siger 14, tilføj filen til filerne for at slette ftp script


    IF !days! GEQ 14 echo DEL \%\%d >>ftpdel.txt
    

  7. Afslut ftp del script og udfør det


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


Andre referencer 1


Det er umuligt at implementere med den indbyggede ftp.exe, som det meget gode svar fra @PA. Viser.


Du kan hellere bruge nogle mere kraftfulde scriptable 3rd party FTP klient.





For eksempel med WinSCP FTP klient er det så trivielt som: [17]


winscp.com /ini=nul /log=delete.log /command ^
    "open ftp://username:password@ftp.example.com/" ^
    "rm /remote/path/*<14D" ^
    "exit"


Se filmasker med tidsbegrænsninger. [18]


(Jeg er forfatter til WinSCP)