Недавно решал подобную проблему. Угробил два дня. Может кому понадобиться результат.
Умеет: искать новые файлы на FTP, качать их, пересылать с помощью GW.
dim cn, rs, strComp
dim fso, tf, fn, rc, tnam
dim count, sa
Dim ogwApp, ogwRootAcct, ogwNewMessage
'качаем список файлов
Set sh = CreateObject("wscript.shell")
Ft = "ftp.exe -s:" + chr(34) + "d:\_EPI\FTP_SCRIPT\urb.txt" + chr(34) + " 10.10.1.3"
sh.Run Ft, 0, -1
Set sh = Nothing
'качаем список файлов ftp2
Set sh = CreateObject("wscript.shell")
Ft = "ftp.exe -s:" + chr(34) + "d:\_EPI\FTP_SCRIPT\big.txt" + chr(34) + " 10.10.1.2"
sh.Run Ft, 0, -1
Set sh = Nothing
'выбираем новые
set cn = CreateObject("ADODB.Connection")
cn.connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\_EPI\FTP_SCRIPT\ftp.mdb"
cn.open
set rs = CreateObject("ADODB.Recordset")
rs.CursorType = 3
rs.LockType = 3
rs.Open "SELECT t0802_UrbNew.File FROM t0802_UrbNew LEFT JOIN t0801_UrbDown ON t0802_UrbNew.File = t0801_UrbDown.fileO WHERE (((t0801_UrbDown.fileO) Is Null));",cn
'пишем конфиг для скачки
set fso = CreateObject("Scripting.FileSystemObject")
set tf = fso.CreateTextFile("d:\_EPI\FTP_SCRIPT\UrbDown.txt", true)
tf.WriteLine "login"
tf.WriteLine "pass"
Do While Not rs.EOF
tnam = Right(rs.fields("file").value, Len(rs.fields("file").value) - instrrev(rs.fields("file").value,"/"))
tf.WriteLine "get " + rs.fields("file").value + " d:\_EPI\FTP_SCRIPT\send\" + tnam
rs.MoveNext
Loop
rs.close
tf.WriteLine "bye"
'выбираем новые для ftp2
rs.Open "SELECT t0803_Big_new.file FROM t0803_Big_new LEFT JOIN t0801_UrbDown ON t0803_Big_new.file = t0801_UrbDown.fileO WHERE (((t0801_UrbDown.fileO) Is Null));",cn
'пишем конфиг для скачки 2
set fso = CreateObject("Scripting.FileSystemObject")
set tf = fso.CreateTextFile("d:\_EPI\FTP_SCRIPT\BigDown.txt", true)
tf.WriteLine "log2"
tf.WriteLine "pass2"
Do While Not rs.EOF
tnam = Right(rs.fields("file").value, Len(rs.fields("file").value) - instrrev(rs.fields("file").value,"/"))
tf.WriteLine "get " + rs.fields("file").value + " d:\_EPI\FTP_SCRIPT\send\" + tnam
rs.MoveNext
Loop
rs.close
tf.WriteLine "bye"
'качаем нужное
Set sh = CreateObject("wscript.shell")
Ft = "ftp.exe -s:" + chr(34) + "d:\_EPI\FTP_SCRIPT\UrbDown.txt" + chr(34) + " 10.10.1.3"
sh.Run Ft, 0, -1
Set sh = Nothing
'качаем нужное ftp2
Set sh = CreateObject("wscript.shell")
Ft = "ftp.exe -s:" + chr(34) + "d:\_EPI\FTP_SCRIPT\BigDown.txt" + chr(34) + " 10.10.1.2"
sh.Run Ft, 0, -1
Set sh = Nothing
'проверяем какие файлы скачали, пишем в таблицу
Set count = CreateObject("scripting.filesystemobject")
aCoun = count.GetFolder("d:\_EPI\FTP_SCRIPT\send\").files.count
if aCoun > 0 then
set files = count.getfolder("d:\_EPI\FTP_SCRIPT\send\").files
rs.open "file", cn
for each file in files
'msgbox file
strComp = Right(file, Len(file) - instrrev(file,"\"))
rs.AddNew
if left(strComp,5) = "17223" then 'востанавливаем исходный путь коряво, но для конкретного случая пойдет
rs.fields("path").value = "DARHIV/IN/" + strComp
else
rs.fields("path").value = "ARHIV_M/IN/" + strComp
end if
rs.fields("fileN").value = strComp
rs.Update
next
rs.close
'пишем в список загруженных, то что скачалось
rs.open "INSERT INTO t0801_UrbDown (fileO) SELECT file.path FROM file;", cn
rs.open "DELETE file.* FROM file;", cn
set rs = nothing
set cn = nothing
'создаем письмо GW
Set ogwApp = CreateObject("NovellGroupWareSession")
Set ogwRootAcct = ogwApp.Login()
Set ogwNewMessage = ogwRootAcct.MailBox.Messages.Add("GW.MESSAGE.MAIL", 4)
ogwNewMessage.BodyText = "Просмотрите, может будет интересно"
ogwNewMessage.Subject = "Новые файлы на FTP"
ogwNewMessage.Recipients.Add "admin@admin.by", NGW, egwTo
for each file in files
sa = file
ogwNewMessage.Attachments.Add sa
next
ogwNewMessage.Send
Set ogwRootAcct = Nothing
Set ogwNewMessage = Nothing
Set ogwApp = Nothing
end if
'Перемещаем файлы в каталог где они нужны
if aCoun > 0 then
for each file in files
strComp = "d:\_EPI\imp\" + Right(file, Len(file) - instrrev(file,"\"))
file.copy strComp,true
file.delete
next
end if
set files = nothing
Set count = nothing
Описание работы:
Получает список файлов с FTP
Ft = "ftp.exe -s:" + chr(34) + "d:\_EPI\FTP_SCRIPT\urb.txt" + chr(34) + " 10.10.1.3"
Параметры запуска ftp.exe - файл urb.txt примерно следующего содержания
login
password
ls /archiv/new d:\_EPI\FTP_SCRIPT\t0802_UrbNew.txt
bye
результат - список файлов, лежащих на FTP пишется в файл d:\_EPI\FTP_SCRIPT\t0802_UrbNew.txt
для хранения списков уже скачанного ранее файлов используется ftp.mdb. таблицы t0801_UrbDown (список скачанного), t0803_Big_new, t0802_UrbNew (таблицы связанные с текстовыми файлам t0802_UrbNew, BigNew.txt). file - временная таблица
С помощью SQL получаем список новых файлов. Из результатов запроса формируем список команд для ftp.exe для загрузки файлов.
tf.WriteLine "login"
tf.WriteLine "pass"
tf.WriteLine "get " + rs.fields("file").value + " d:\_EPI\FTP_SCRIPT\send\" + tnam
tf.WriteLine "bye"
В таблицу file (поля path, fileN) пишем список файлов находящихся в папке загрузки d:\_EPI\FTP_SCRIPT\send\.
Добавляем имена загруженных файлов в таблицу t0801_UrbDown, что бы повторно не качать.
Чистим временную таблицу FILE
Далее используя Novell GroupWise отправлячем скачанные файлы получателям. (На компе есть постоянно открытая сессия GW, поэтому процедура отправки сильно сокращена)
Перемещаем файлы в каталог где они хранятся постоянно, переписывая одноименные.