2012-03-08 15 views
3

Найдено несколько решений для местных, но нужен для FTP действия:Пакетное удаление файлов на FTP старше х дней

У меня есть ежедневный пакетный скрипт для резервного копирования баз данных 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

Я сказал, что это окно пакета .. почему ?. PowerShell Извините, смущенный. Да, я хочу продлить этот пакетный скрипт – Grashopper

+0

У вас есть тег как PowerShell –

ответ

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 использует дни, используя алгоритм Флигеля-Ван Флэндерна. Смотрите этот SO вопрос для деталей и реализации 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

это громоздко реализовать с помощью встроенного ftp.exe, как показывает очень хорошее 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

Смежные вопросы