Что нового

[Сеть, интернет] удаления файлов старше определённой даты с FTP сервера

Ksenz44

Новичок
Сообщения
32
Репутация
0
Версия AutoIt:3.3.6.1

Описание:
Доброе время суток возникла такая проблемка нужна программка для удаления файлов старше определённой даты с FTP сервера. Благодаря умельцам с форума нашел два скрипта которые в суме бы дали мне что надо но уж 3 день мучаюсь не получается их соединить.
Первый скрипт подключение к серверу и удаление файла. Долго мучился но всё-таки сделал его подходящим для себя так как не мог найти место куда нужно вписывать порт.
Код:
#include <FTPEx.au3>

$sPassive = "0"
$sPort = "2222"
$sServer = "1.1.1.1"
$sUserName = ""
$sPassword = ""
$sDir = "/ftp_shares/Backup1c/BackUpSQL/BPATPA/Text1.txt"

$hOpen = _FTP_Open('MyFTP Control')
	If @Error Then
	MsgBox(16,"Супер FTP клиент","Не удалось создать сессию! Код ошибки: "&@Error&"")
	;GUIDelete ( $hWnd )
	;GuiEnable($hGui)
	;Return SetError(1,0,0)
	EndIF
	
$hConn = _FTP_Connect($hOpen, $sServer, $sUserName, $sPassword, $sPassive, $sPort)
	If @Error Then
	MsgBox(16,"Супер FTP клиент","Не удалось подключиться к серверу! Код ошибки: "&@Error&"")
EndIF
 MsgBox(16,"Супер FTP клиент",$hConn)
_FTP_FileDelete($hConn, $sDir)

второй скрипт взят с форума только чутка уменьшил. Он по флагу выбирает атрибут и дальше высчитывает разницу между текущей датой и датой файла сравнивает с дельтой , если больше то переносит в корзину.
Код:
#include <Date.au3>
#include <File.au3>

$path = "C:\Users\Stas\Downloads" ;папка для очистки.
$delta = "2" ; кол-во дней, старше которых удаляем.
$flag = 0; 0-дата последнего изменения, 1-дата создания, 2-дата последнего открытия.

$aReturn = _FileSearch($path, '*.*')
For $i = 1 To UBound($aReturn) - 1
    $aTime = FileGetTime($aReturn[$i], $flag)
	MsgBox(16,"Супер FTP клиент",$aReturn[$i])
    If _DateDiff('D', $aTime[0] & '/' & $aTime[1] & '/' & $aTime[2], _NowCalc()) > $delta Then
		MsgBox(16,"Супер FTP клиент",$aReturn)
        FileRecycle($aReturn[$i])
    EndIf
Next

_DirRemoveEmptyTime($path)

Func _FileSearch($sPath, $sFileMask)
    Local $sOut = StringToBinary("0" & @CRLF, 2), $aOut
    Local $hDir = Run(@ComSpec & ' /U/C DIR "' & $sPath & '\' & $sFileMask & '" /S/B/A-D', @SystemDir, @SW_HIDE, 6)

    While 1
        $sOut &= StdoutRead($hDir, False, True)
        If @error Then ExitLoop
    WEnd

    $aOut = StringRegExp(BinaryToString($sOut, 2), "[^\r\n]+", 3)
    If @error Then Return SetError(1)

    $aOut[0] = UBound($aOut) - 1
    Return $aOut
EndFunc   ;==>_FileSearch

Func _DirRemoveEmptyTime($sDIR)
    Local $iPRC, $aDIR = _FileListToArray($sDIR, '*', 2)
    If IsArray($aDIR) Then
        For $i = 1 To $aDIR[0]
            _DirRemoveEmptyTime($sDIR & "\" & $aDIR[$i])
        Next
    EndIf
    If DirGetSize($sDIR) = 0 Then
        $aTimeDIR = FileGetTime($sDIR, $flag)
        If _DateDiff('D', $aTimeDIR[0] & '/' & $aTimeDIR[1] & '/' & $aTimeDIR[2], _NowCalc()) > $delta Then
            FileRecycle($sDIR)
        EndIf
    EndIf
EndFunc   ;==>_DirRemoveEmptyTime


Примечания:
По отдельности скрипты работаю. Хотелось бы соединить. Буду благодарен любой помощи.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Чуток поправил первый скрипт, так хотели ?
Код:
#include <FTPEx.au3>
#include <Date.au3>
#include <Array.au3>

$sPassive = "0"
$sPort = "21"
$sServer = "ftp.csx.cam.ac.uk"
$sUserName = ""
$sPassword = ""
$delta = "2" ; кол-во дней, старше которых удаляем.
$sDir = "/pub/software/programming/pcre/";Здесь путь к папке, где искать файлы

$hOpen = _FTP_Open('MyFTP Control')
If @error Then
    MsgBox(16, "Супер FTP клиент", "Не удалось создать сессию! Код ошибки: " & @error & "")
    ;GUIDelete ( $hWnd )
    ;GuiEnable($hGui)
    ;Return SetError(1,0,0)
EndIf

$hConn = _FTP_Connect($hOpen, $sServer, $sUserName, $sPassword, $sPassive, $sPort)
If @error Then
    MsgBox(16, "Супер FTP клиент", "Не удалось подключиться к серверу! Код ошибки: " & @error & "")
EndIf
;MsgBox(16, "Супер FTP клиент", $hConn)

Local $NowData = @YEAR & "/" & @MDAY & "/" & @MON & " " & @HOUR & ":" & @MIN & ":" & @SEC
Local $h_Handle
Local $aFile = _FTP_FindFileFirst($hConn, $sDir, $h_Handle)
If _DateDiff('D', _FTP_FileTimeLoHiToStr($aFile[2], $aFile[3],1), $NowData) > $delta Then
     _FTP_FileDelete($hConn, $sDir & $aFile[10])
EndIf



While 1
    $aNextFile = _FTP_FindFileNext($h_Handle)

    If @error Then
        ExitLoop
    Else
       ; _ArrayDisplay($aNextFile)
        If _DateDiff('D', _FTP_FileTimeLoHiToStr($aNextFile[2], $aNextFile[3],1), $NowData) > $delta Then
           _FTP_FileDelete($hConn, $sDir & $aNextFile[10])
        EndIf
    EndIf

WEnd

_FTP_Close($hOpen)
Получилось ?
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
Выглядит правдоподобно но ругается на :
If _DateDiff('D', _FTP_FileTimeLoHiToStr($aNextFile[2], $aNextFile[3]), _NowCalc()) > $delta Then
If _DateDiff('D', _FTP_FileTimeLoHiToStr(^ ERROR
>Exit code: 1 Time: 0.412
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Ах , да
Код:
_FTP_FileTimeLoHiToStr($aFile[2], $aFile[3],1)
нужно с параметром 1 , по умолчанию возвращает дату наизнанку, от
Код:
_NowCalc()
, исправил в предыдущем посте и в цикл
Код:
$aNextFile = _FTP_FindFileNext($h_Handle)
не включил , проверяйте (самому проверить нет возможности)
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
Та же самая ошибка
Код:
If _DateDiff('D', _FTP_FileTimeLoHiToStr($aNextFile[2], $aNextFile[3],1), _NowCalc()) > $delta Then
If _DateDiff('D', _FTP_FileTimeLoHiToStr(^ ERROR
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Пока исправлял....в цикл не включил
Код:
$aNextFile = _FTP_FindFileNext($h_Handle)
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
Код:
If _DateDiff('D', _FTP_FileTimeLoHiToStr($aNextFile[2], $aNextFile[3],1), _NowCalc()) > $delta Then _FTP_FileDelete($hConn, $sDir & $aNextFile[10])
If _DateDiff('D', _FTP_FileTimeLoHiToStr(^ ERROR

всё ровно не нравится ему эта переменная :'(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Исправил, так точно не должно ругаться !
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
Добрый новый день) вы будете смеяться но все ровно выдает туже ошибку(((
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Сейчас сделаю себе FTP сервер, проверю .
У меня всё работает, только проверьте есть ли значения [2] и [3] ( Время создания Low
Время создания Hi) в массиве, если всё ОК, то закомментируйте или удалите строки
Код:
#include<Array.au3>
.................
_ArrayDisplay($aNextFile)

Вы ведь копируете исправленную версию скрипта со второго поста ?
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
Конечно копирую ;D.Добрый день программа начала отрабатывать но результатов, не каких даже массив не выдает из значений который должен был с помощью.
Код:
_ArrayDisplay($aNextFile)
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Я брал FTP сервер из справки, только менял
Код:
_FTP_FileDelete
на
Код:
MsgBox(0,'',$aNextFile[10])
и видел названия всех файлов по указанному пути, ах да , ещё менял
Код:
_FTP_FileTimeLoHiToStr($aNextFile[6], $aNextFile[7],1)
, так как время создания файлов на том сервере везде "0" были, пришлось брать данные по последней записи. Смотрите правильно ли указан путь ,порт, итд..... первый файл находит ?
Код:
$aFile = _FTP_FindFileFirst($hConn, $sDir, $h_Handle)
посмотрите, что он находит
Код:
_ArrayDisplay($aFile)
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
спс огромное то что помогаете. сервер подключается так как стоят проверки плюс проверил отдельно если написать то удаляет. попробовал поставить
Код:
MsgBox(16," FTP клиент",$aFile)

окно пустое значит не находит первый файл я так понимаю, так как если вставляю
Код:
MsgBox(0,'',$aNextFile[10])
то он даже сообщение не выдает. если оставляю окно
Код:
MsgBox(16, "Супер FTP клиент", $hConn)
выдает ошибку 0x00cc0008, но если удалять просто на прямую как в первом скрипте моем то выдается она же но удаляет. я уж думаю наверно я дурак)))
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
выдает ошибку 0x00cc0008
это не ошибка, а идентификатор, при ошибке был-бы просто "0". В этом окне
Код:
MsgBox(16," FTP клиент",$aFile)
вы не увидите ничего, так как "$aFile" в случае успешного выполнения команды есть массив,посмотреть массив можно
Код:
_ArrayDisplay($aFile)
а вот в случае ошибки "$aFile"равен "0" и его-бы вы увидели.
то он даже сообщение не выдает
сообщение должно быть в любом случае, значит скрипт до него просто не доходит, наверное вы его вставляете после условия, которое не выполняется. проверяйте значения сразу после строки
Код:
$aFile = _FTP_FindFileFirst($hConn, $sDir, $h_Handle)
_ArrayDisplay($aFile)

Чуть изменил для проверки - закомментировал удаление файлов, но добавил
Код:
MsgBox
с именами найденых файлов. Попробуйте запустить у себя, ничего не меняя, должно показать все файлы на сервере "ftp.csx.cam.ac.uk" по пути "/pub/software/programming/pcre/".
Код:
#include <FTPEx.au3>
#include <Date.au3>
#include <Array.au3>

$sPassive = "0"
$sPort = "21"
$sServer = "ftp.csx.cam.ac.uk"
$sUserName = ""
$sPassword = ""
$delta = "2" ; кол-во дней, старше которых удаляем.
$sDir = "/pub/software/programming/pcre/";Здесь путь к папке, где искать файлы

$hOpen = _FTP_Open('MyFTP Control')
If @error Then
    MsgBox(16, "Супер FTP клиент", "Не удалось создать сессию! Код ошибки: " & @error & "")
    ;GUIDelete ( $hWnd )
    ;GuiEnable($hGui)
    ;Return SetError(1,0,0)
EndIf

$hConn = _FTP_Connect($hOpen, $sServer, $sUserName, $sPassword, $sPassive, $sPort)
If @error Then
    MsgBox(16, "Супер FTP клиент", "Не удалось подключиться к серверу! Код ошибки: " & @error & "")
EndIf
MsgBox(16, "Супер FTP клиент", $hConn)


Local $h_Handle
Local $aFile = _FTP_FindFileFirst($hConn, $sDir, $h_Handle)
If @error Then
	MsgBox(48,'Ошибка !','Не найден файл на FTP сервере !')
	_FTP_Close($hOpen)
	exit
Else
	  MsgBox(48,'Найден файл','Найден файл '&$aFile[10],1)
      If _DateDiff('D', _FTP_FileTimeLoHiToStr($aFile[2], $aFile[3],1), _NowCalc()) > $delta Then
       ;   _FTP_FileDelete($hConn, $sDir & $aFile[10])
      EndIf
EndIf



While 1
    $aNextFile = _FTP_FindFileNext($h_Handle)

    If @error Then
        ExitLoop
    Else
        MsgBox(48,'Найден файл','Найден файл '&$aNextFile[10],1)
        If _DateDiff('D', _FTP_FileTimeLoHiToStr($aNextFile[2], $aNextFile[3],1), _NowCalc()) > $delta Then
          ; _FTP_FileDelete($hConn, $sDir & $aNextFile[10])
        EndIf
    EndIf

WEnd

_FTP_Close($hOpen)
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
Доброе время суток попробовал последний скрипт если с вашими данными то все как я понял работает сообщения с файлами выдается)а у меня пишет нет файлов значит дело в моём сервере наверно я вот думаю у меня сервер не именем а ip адресом это не может повлиять? И почему тогда первый скрипт находит и удаляет если задать путь. :'( :'( :'(
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
у меня сервер не именем а ip адресом это не может повлиять?
нет, без разницы можно и IP. Замените в примере "ftp.csx.cam.ac.uk" на "131.111.8.115" ничего не изменится. Вы путь правильно указываете ? В Вашем случае должно быть "/ftp_shares/Backup1c/BackUpSQL/BPATPA/" .
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
Вы не поверите я нашел почему у меня не видел файлы параметр активного и пассивного соединения я поменял на с 0 на 1 и вуаля все заработало фалы отображаются :laugh: :laugh: ) Но если все сделать в действующем скрипте с удалением то не удаляет) но уже файлы видит)спасибо)
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Отлично ! Теперь можете поставить
Код:
$aNextFile = _FTP_FindFileNext($h_Handle)
_ArrayDisplay( $aNextFile)
и смотрите, что в параметрах. У Вас не выполнятся условие сравнения дат, потому до удаления файлов и не доходит дело.
 
Автор
K

Ksenz44

Новичок
Сообщения
32
Репутация
0
запустил
Код:
_ArrayDisplay( $aNextFile)
 

Вложения

  • Безымянный.png
    Безымянный.png
    12.1 КБ · Просмотры: 12
Верх