1

Тема: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Здравствуйте!

Хотелось бы получить "это" при следующих данных.

Мы используем клиента widows ftp.exe.
Батником:

ftp.exe -s:"ftp.txt" >abc.txt

(в ftp.txt применяем команду DIR)
Получаем файл abc.txt вида:

open ftp.xxxx.ru
220 Microsoft FTP Service
®ў вҐ«м (ftp.xxxx.ru:(none)):
331 Password required for xxx.
230 User xxx logged in.
ftp> literal pasv
227 Entering Passive Mode ... .
ftp> ftp>
ftp> cd ...
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.

-r-xr-xr-x   1 owner    group        62566404 Nov 10 11:56 2704_Dolzhniki i energetiki.m2p

226 Transfer complete.
ftp: 186 ®«г祭® §  0,00 (ᥪ) б® бЄ®а®бвмо 186000,00 (ЉЃ/ᥪ).

ftp> ftp>
ftp>
close

Можно ли написать то, что будет анализировать этот файл на предмет появления новых строк:
-r-xr-xr-x   1 owner    group        62566404 Nov 10 11:56 2704_Dolzhniki i energetiki.m2p

И из этой строки вычленять имя нового файла?
Имена могут быть и русскими.
Расширения - можно ограничиться списком.
Достаточно mpg,m2p,avi

2 (изменено: Rumata, 2010-11-11 19:45:28)

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Да, можно. Вам потребуется серия команд FINDSTR, которая будет вычленять строки вида -r-xr-x-rx, а потом из них необходимые строки с именами файлов. Например так:

ftp -s:"ftp.txt" | findstr "\<-r-xr-xr-x" | findstr /r "\.mpg$ \.m2p$ \.avi$"

На выходе получите список файлов с заданным расширением.

( 2 * b ) || ! ( 2 * b )

3

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Rumata пишет:

Да, можно. Вам потребуется серия команд FINDSTR, которая будет вычленять строки вида -r-xr-x-rx, а потом из них необходимые строки с именами файлов. Например так:

ftp -s:"ftp.txt" | findstr "\<-r-xr-xr-x" | findstr /r "\.mpg$ \.m2p$ \.avi$"

На выходе получите список файлов с заданным расширением.

А с помощь VBS ?
А сам анализ и обнаружение нового файла:D
Сейчас 1 часть задачи решается через CMD, последняя - письмо - без проблем через VBS.

4

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

bnp322, избегайте излишнего цитирования.

5 (изменено: Rumata, 2010-11-11 21:05:44)

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

bnp322 пишет:

А с помощь VBS ?
А сам анализ и обнаружение нового файла:D
Сейчас 1 часть задачи решается через CMD, последняя - письмо - без проблем через VBS.

Я бы решил это просто. Как продолжение предыдущего примера:

ftp -s:"ftp.txt" | findstr "\<-r-xr-xr-x" | findstr /r "\.mpg$ \.m2p$ \.avi$" | cscript //nologo parse_ftp_files.vbs

Если посмотреть внимательно, то первоначальное предложение решало следующие задачи:
поиск и вывод только файлов с определенным расширением из определенного каталога. Следующий скрипт (я его назвал parse_ftp_files.vbs) делает следующую задачу:
1. читатет построчно стандартный ввод
2. разбирает входную строку, например "бъет" на части по пробелам
3. что-то делает с полученными данными.
Мне неизвестно, что именно требуется делать со всем списком полученных файлов, это Вы можете запрограммировать сами. Здесь же показан скелет программы, на который Вы можете нанизать мясо.

DO UNTIL WScript.StdIn.AtEndOfStream
    Line = WScript.StdIn.ReadLine
    Parts = Split(Line, " ")
    ' здесь работает Ваша фантазия, что делать дальше
LOOP
( 2 * b ) || ! ( 2 * b )

6

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

ftp -s:"ftp.txt" | findstr "\<-r-xr-xr-x" | findstr /r "\.mpg$ \.m2p$ \.avi$" | cscript //nologo parse_ftp_files.vbs

Спасибо!
Не думал, что приведенный код будет в 1 строку и прозрачен для понимания!

7

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Использую так:

ftp.exe -s:"ftp.txt" | findstr /b/c:"-r-xr-xr-x" | findstr /e "avi mpg m2p" | cscript //nologo parse_ftp_files.vbs

Ошибка:
FINDSTR: Ошибка записи

Если из батника убрать 

| cscript  ....

, то нужные строки ищутся верно.

8

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Ошибка:
FINDSTR: Ошибка записи

Этого нет! Ошибочка!

9

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Мне сложно понять Ваши мысли из последних двух Ваших сообщений. Я специально проверил свои примеры на своем локальном ftp-сервере. Они работают отменно. Как при наличии списка определенных файлов так и при их отсутствии.

( 2 * b ) || ! ( 2 * b )

10

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Конечный вид батника:

ftp.exe -s:"bst.ftp" | findstr /b/r/c:"-r.*-.*-" | findstr /e "avi mpg m2p" | cscript //nologo parse_ftp_files.vbs

Скрипта:

Dim Line, Parts, Parts1, Parts2

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.CreateTextFile("C:\list.txt")

DO UNTIL WScript.StdIn.AtEndOfStream
    Line = WScript.StdIn.ReadLine
    Parts1 = Split(Line,":")
    Parts2 = Mid(Parts1(1),3)
    Parts = LTrim(Parts2)

TextStream.WriteLine Parts 

LOOP
TextStream.Close
WScript.Quit 0

LTrim - можно было и не использовать.

В результате я получаю файл с именами файлов построчно, помогите далее:
Сравнить эти имена с имеющимися в определенной папке (без вложений) именами файлов и вывод сообщения "новые файлы: ххх, уууу"

11

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Сравнить эти имена с имеющимися в определенной папке (без вложений) именами файлов и вывод сообщения "новые файлы: ххх, уууу"

Алгоритм плох:
Если файл не скачать, то будут вечные напоминания о том, что он новый!:(

Я планирую запускать скрипт периодически (он не должен вести непрерывный мониторинг, а раз в час и ОК!)
Запустился, сверил текущий файл list.txt  с созданным в предыдущем часе и ...

Помогите! Я думаю это просто!

12

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Ваша задача стала ясной и понятной. Используйте программу WGET. Это хорошее решение. Для самообразования почитайте соответствующее руководство GNU wget. Например:

Для хранение зеркала страницы (или папки FTP), то используйте --mirror (-m), что заменяет -r -l inf -N. Вы можете добавить Wget в crontab с запросом на проверку обновлений каждое воскресенье:

        crontab
        0 0 * * 0 wget --mirror http://www.gnu.org/ -o /home/me/weeklog

Вы должны понимать, что этот пример из мира юникс, но ничто не мешает Вам найти порт программы под win32-платформу и использовать ее под свои нужды - скачивание определенных файлов с заданным расширением и из определенного каталога. Естественно, надо внимательно читать документацию. Например, следующий пример позволяет скачивать все файлы с заданным расширением %__src_ext__% в заданный каталог %__dst_dir__%, на которые имеются ссылки со страницы %~1 (задается в командной строке). Сама страница не сохраняется, при обрыве связи скачивание возобновляется с прерванного места. Остальные параметры уже не припомню.

wget -c -nc -E -H -k -K -p -nd -A "%__src_ext__%" -P "%__dst_dir__%" "%~1"
( 2 * b ) || ! ( 2 * b )

13

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

OFF: 2Rumata: «%__cd__%» — это тоже пришло из мира UNIX? «%__<bla-bl-bla>__%» — некий стандарт на переменные окружения?

14

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Я не хочу скачивать!
Я лишь хочу знать, а далее принимать решение.

15

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

alexii
Конечно же нет. Это не мир юникс и это не стандарт кодирования переменных окружения (если только кто-то не использует подобное).

bnp322
Не понятно, к чему просто знание существования некоторых файлов? Может быть вам нужен следующий алгоритм?
1. скачать список файлов с заданным расширением из заданного каталога

ftp -s:"ftp.txt" | findstr "\<-r" | findstr /r "\.mpg$ \.m2p$ \.avi$" > new_list.txt

2. сравнить новый список файлов со старым и сохранить отличия в файл

fc old_list.txt new_list.txt > diff_list.txt

3. что-то сделать с файлом diff_list.txt

( 2 * b ) || ! ( 2 * b )

16

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

2Rumata: я к чему, коллега — если в командной строке выполнить:

echo %__cd__%

то увидим текущий каталог с завершающим обратным слэшэм, например:

D:\Install\VirusTotal Uploader 2.0>echo %__cd__%
D:\Install\VirusTotal Uploader 2.0\

При том я не нашёл каких-то упоминаний об этой переменной нигде (что пытаются выдать поисковики на подобный запрос, думаю, общеизвестно). Единственное упоминание про подсистему POSIX — отсюда и был мой вопрос, уж больно похожа форма переменных.

17

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Rumata пишет:

alexii
Конечно же нет. Это не мир юникс и это не стандарт кодирования переменных окружения (если только кто-то не использует подобное).

bnp322
Не понятно, к чему просто знание существования некоторых файлов? Может быть вам нужен следующий алгоритм?
1. скачать список файлов с заданным расширением из заданного каталога

ftp -s:"ftp.txt" | findstr "\<-r" | findstr /r "\.mpg$ \.m2p$ \.avi$" > new_list.txt

2. сравнить новый список файлов со старым и сохранить отличия в файл

fc old_list.txt new_list.txt > diff_list.txt

3. что-то сделать с файлом diff_list.txt

  Да он хорош, только между пунктом 1 и 2 я не умею парсить в cmd с вводом и выводом куда надо!
Я могу написать в cmd

 for /F "tokens=2 delims=:" %%i in (c:\1.txt) do @echo %%i

но нужно еще отбросить 3 символа слева и сохранить в файл.

А на vbs пункт 2 как сделать.

18

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

bnp322, коллега, Вы достаточно внимательно прочли предыдущее замечание?

19

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Много и мало - относительно!

Я хотел показать, что отвечаю на конкретный пост, не на последующий...

20

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Показывайте, пожалуйста, ровно столько, чтобы это было понятно. А когда Вы бессвязно цитируете весь пост целиком — это Ваша лень-матушка.

21 (изменено: Евген, 2010-11-15 17:23:24)

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

А почему не было предложения парсить результат ответа MSXML2.XMLHTTP ?
Ведь задать нужную папку и парсить результирующую строку ответа - тоже вариант, там будет нужная инфа...

Времени не хватает... :-(

22

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Евген пишет:

А почему не было предложения парсить результат ответа MSXML2.XMLHTTP ?

Эта мысль возникала во "втором чтении" проблемы.

Сейчас задача представляется так (возможно она описывается по другому, но это выявилось из обсуждения):
1. считать текущий листинг каталога (список new)
2. сравнить со старым (список old)
3. получить и сохранить различия (список diff)
4. перезаписать список new в old для следующего сравнения

( 2 * b ) || ! ( 2 * b )

23

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Все Замечательно!:D
Но в этом я ничего не ...

А то что было описано ранее - практически все позволяет.
А кто-нибудь скажет:

Загрузку с фтр можно осуществить через vbs

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace("c:\1") 'место назначения
objFolder.CopyHere "ftp://ххх:уууу@my.ftp.ru/xxx/yyy.mpg"
WScript.Sleep 60000 'даём время на скачивание (минута)

А листинг содержимого через vbs?

24

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Можно

Времени не хватает... :-(

25

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

А как же?

26

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

По ссылке в #24 посту пробовали переходить ?
Там тонны кода как это можно сделать...

Времени не хватает... :-(

27

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Да нет там тонн!
Есть примеры загрузки конкретных файлов с ftp и http и страницы.
О  подобном команде DIR, речи там не было.

28

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Option Explicit

Dim objShell
Dim objFolder
Dim objFolderItem


Set objShell  = WScript.CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace("ftp://ftp.microsoft.com/")

If Not objFolder Is Nothing Then
    For Each objFolderItem In objFolder.Items
        WScript.Echo objFolderItem.Name
    Next
    
    Set objFolder = Nothing
Else
    WScript.Echo "Not found"
End If

Set objShell  = Nothing

WScript.Quit 0

bussys
deskapps
developr
KBHelp
MISC
MISC1
peropsys
Products
PSS
ResKit
Services
Softlib

29

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

О как здорово!
В чистом виде имена файлов и папок, а как через vbs сделать аналогию

fc old_list.txt new_list.txt > diff_list.txt

Т.е получить разность двух списков.
Подскажите?

30

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

alexii

А в Ваш код как внести конструкцию сразу отбрасывающую слишком старое, что-то типа дополнительного условия:

If DateDiff("d", objFolderItem, Now) < 10 Then

31

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Ваш вопрос не понятен.

32

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

У файлов на фтп Вы "берете" параметр  objFolderItem.Name, а если еще взять objFolderItem.ModifyDate , то можно получить и дату последней модификации объектов (я пробовал работает).
Используя DateDiff(), очевидно, можно выводить не весь список  objFolderItem , а лишь те, что "моложе" 7 дней (к примеру).

Я пробовал вместо Вашего IF ...  вставить свое

If DateDiff("d", objFolderItem, Now) < 7 Then

,

Но получается весь список с датами 2 месяцев.

33

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

взять objFolderItem.ModifyDate

Я пробовал … objFolderItem…

Оно?

34

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Ну да! Дату модификации.

35

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Теперь Вы не поняли мой намёк. Попробуйте не просто объект (и. соответственно, его свойство по умолчанию), а конкретно указанное свойство:

…DateDiff("d", objFolderItem.ModifyDate, Now)…

36

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Я пробую:

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.CreateTextFile("C:\Documents and Settings\bnp\Рабочий стол\Улан_Уде.txt")

If Not objFolder Is Nothing Then

If  DateDiff("d", objFolderItem.ModifyDate, Now) < 7 Then

    For Each objFolderItem In objFolder.Items

TextStream.WriteLine objFolderItem.ModifyDate &"    "& objFolderItem.Size &"    "& objFolderItem.Name

    Next
   
    Set objFolder = Nothing
Else
    WScript.Echo "Not found"

End If
End If
Set objShell  = Nothing
TextStream.Close
WScript.Quit 0

А оно выдает ошибку:
Строка: 16
Символ: 1
Ошибка: Требуется объект: ''
Код: 800A01A8


А я чайник!:|

37

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Получилось!

If Not objFolder Is Nothing Then

    For Each objFolderItem In objFolder.Items
    If DateDiff("d", objFolderItem.ModifyDate, Now) < 7 Then

TextStream.WriteLine objFolderItem.ModifyDate &"    "& objFolderItem.Size &"    "& objFolderItem.Name

 End If

    Next
   
    Set objFolder = Nothing
Else
    WScript.Echo "Not found"

End If
Set objShell  = Nothing
TextStream.Close
WScript.Quit 0

Помогите с постом 25 ( как с помощью vbs сделать аналог команды fc old_list.txt new_list.txt > diff_list.txt).
И как в текущем примере добавить сортировку, например по  objFolderItem.Size.
Пожалуйста!

38

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

В скрипт поста 28 имеет нюанс:

Он никогда не дает ответ:
  WScript.Echo "Not found"
Который очевидно должен происходить.
Ни с пустой папкой ни с отсутствием самой папки!?

39

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Я тоже так думал. Очевидно, такова реализация. Значит пора переходить на сторонние компоненты: VBScript: Работа с протоколом FTP с помощью компонента Chilkat FTP, ещё (не пробовал), ну и, конечно, «Microsoft.XMLHTTP».

40 (изменено: inionis, 2013-12-27 22:38:24)

Re: VBS/CMD: Сканирование FTP сервера на предмет новых файлов

Недавно решал подобную проблему. Угробил два дня. Может кому понадобиться результат.
Умеет: искать новые файлы на 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, поэтому процедура отправки сильно сокращена)

Перемещаем файлы в каталог где они хранятся постоянно, переписывая одноименные.