Отслеживание папки и обработка файлов

Обсуждение программ nnCron и nnCron LITE

Отслеживание папки и обработка файлов

Postby wit2006 » Fri, 14 Apr 2017, 06:23

Привет всем.
Помогите советом, по форуму ничего не нашел в helpe то же.
Задача в следующем, есть папка в неё из почты автоматически выгружаются файлы, файлы с двойным расширением, необходимо отслеживать их поступление и обрабатывать их, то есть убирать двойное расширение оставляя только внутреннее расширение.
Как отслеживать поступление у меня вопросов не возникает, возникает сложность в обработке. С Фортом раньше дело не имел.
Помогите советом как организовать данную обработку в nnCron/
wit2006
 
Posts: 3
Joined: Tue, 08 Jul 2014, 13:24

Re: Отслеживание папки и обработка файлов

Postby VoidVolker » Fri, 14 Apr 2017, 13:55

Подключаем плагин: viewtopic.php?f=23&t=9477#p21479
Code: Select all
#( Задача_134614042017
WatchDir: "C:\path\to\dir"
SingleInstance
Action:
FOR-FILES: "C:\path\to\dir\*.ext1.ext2"
    FOUND-FULLPATH                         \ Исходный файл
    2DUP S" .ext1" CropAfterStringEnd S>SZ \ Новое имя файла \Т.к. CropAfterStringEnd не выделяет память под новую строку - то делаем это вручную (S>SZ)
    FMOVE                                  \ Переименовываем/перемещаем файл
;FOR-FILES
)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Отслеживание папки и обработка файлов

Postby wit2006 » Mon, 17 Apr 2017, 11:22

Уважаемый VoidVolker по пробовал ваш вариант но к сожалению не работает, плагин я подключил, но не отрабатывает файлы по этому коду.
wit2006
 
Posts: 3
Joined: Tue, 08 Jul 2014, 13:24

Re: Отслеживание папки и обработка файлов

Postby dothen » Mon, 17 Apr 2017, 23:57

wit2006 попробуй так
Code: Select all
    #( Задача_134614042017
    WatchDir: "C:\path\to\dir"
    SingleInstance
    Action:
    500 PAUSE
    FOR-FILES: "C:\path\to\dir\*.ext1.*"
        FOUND-FULLPATH                      \ Исходный файл
        2DUP S" .ext1" CropAfterStringEnd S>SZ  \ Новое имя файла
        FMOVE                               \ Переименовываем/перемещаем файл
    ;FOR-FILES
    )#
Для FMOVE нужна az-строка.
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: Отслеживание папки и обработка файлов

Postby elos » Tue, 18 Apr 2017, 08:45

Что-то про az-строку для FMOVE в файле помощи про это ни слова... Как и в исходниках.
elos
 
Posts: 665
Joined: Tue, 25 Apr 2006, 11:15

Re: Отслеживание папки и обработка файлов

Postby VoidVolker » Tue, 18 Apr 2017, 08:54

dothen
Да, правильно, забыл, что CropAfterStringEnd обрезает исходную строку без её копирования.
elos wrote:Что-то про az-строку для FMOVE в файле помощи про это ни слова... Как и в исходниках.

Да, это особенность WinAPI - все строки должны оканчиваться нулем, а дополнительных оберток в ннкроне для этого не делается. Поэтому слова, которые используют WinAPI и принимают строки в большинстве своем требуют строку с нулем на конце.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Отслеживание папки и обработка файлов

Postby wit2006 » Thu, 20 Apr 2017, 08:34

Спасибо всем, второй вариант оказался рабочим.
wit2006
 
Posts: 3
Joined: Tue, 08 Jul 2014, 13:24

Re: Отслеживание папки и обработка файлов

Postby DrInch » Wed, 14 Jun 2017, 10:24

Заранее извиняюсь за возможный повтор вопроса, но ответа не нашел ни здесь, ни в доках, ни в гугле.
Сделал запуск по соббытию "создание/изменение файла" - соббытие срабатывает дважды практически одновременно.
Похоже, что первый запуск происходит в момент создания файла, а повторный уже при записи в него.
Как этого избежать?
Включил "Ждать завершения" (START-APPW: приложение) - не помогает.
Как сделать, чтобы запускалось только 1 раз по окончании записи в файл?

Главная неприятность в том, что файл после обработки удаляется и иногда выходит так, что успевает обработаться только, что созданный файл нулевого размера и автоудаляется. И данные которые были дописаны в файл, пока шел второй запуск теряются. Второму запуску уже ничего не остается.
DrInch
 
Posts: 3
Joined: Wed, 14 Jun 2017, 10:11

Re: Отслеживание папки и обработка файлов

Postby elos » Fri, 16 Jun 2017, 08:49

DrInch, откинем описание так и не выложенного кода задачи (что неоднократно напоминается).

Лучше скажи чего ты хочешь от создаваемого файла (какой программой?) Настроек для удаляемого файла никаких в программе нет, чтобы его оставлять?
Ещё ничего не зная, предположу возможное использование FILE-EXIST:.
А "залочить" его никак, чтобы исключить удаление? С последующим освобождением и ручным (если что) удалением...

А мы коллективно (может быть) подскажем как пойти альтернативным путём...
elos
 
Posts: 665
Joined: Tue, 25 Apr 2006, 11:15

Re: Отслеживание папки и обработка файлов

Postby DrInch » Fri, 16 Jun 2017, 10:30

elos
Код стандартный. Авто-создан через GUI. Так, что решил, что нет смысла его постить. Но если интересно - пожалуйста:
Spoiler: show
Code: Select all
WatchFile: "D:\!FFAutoSave\AutoSave_*.htm"
Action:
StartIn: "D:\"
SWHide   NormalPriority
START-APPW: D:\f.bat

Запускается батник, который:
1. Переименовывает отслеживаемый файл (страница, сохраняемая из браузера) в соответствии с текущими дата-время.
2. Создает управляющий файл (для утилиты ftp.exe) для загрузки отслеживаемого файла на удаленный FTP.
3. Запускает ftp.exe под управлением только, что созданного скрипта.
4. По окончании загрузки удаляет управляющий и отслеживаемый файлы.
Spoiler: show
Code: Select all
@ECHO OFF
SET remotedir=мой_сервер/upload
SET localdir=D:\!FFAutoSave
SET scriptfile=D:\f.txt
SET ftpserv=мой_сервер
SET ftplogin=мой_логин
SET ftppass=мой_пароль
IF EXIST %scriptfile% (
  EXIT 0
)
ECHO open> %scriptfile%
ECHO %ftpserv%>> %scriptfile%
ECHO %ftplogin%>> %scriptfile%
ECHO %ftppass%>> %scriptfile%
ECHO cd %remotedir%>> %scriptfile%
ECHO lcd %localdir%>> %scriptfile%
ECHO binary>> %scriptfile%
SET yy=%date:~8,2%
SET mn=%date:~3,2%
SET dd=%date:~0,2%
IF "%time:~0,1%"==" " (
  SET hh=0%time:~1,1%
) ELSE (
  SET hh=%time:~0,2%
)
SET mm=%time:~3,2%
SET ss=%time:~6,2%
ping -n 15 127.0.0.1 > NUL
cd %localdir%
FOR %%f IN (AutoSave_*.htm) DO (
  ren %%f %yy%%mn%%dd%_%hh%%mm%%ss%_%%f
)
FOR %%f IN (*_AutoSave_*.htm) DO (
  ECHO send %%f>> %scriptfile%
)
ECHO bye>> %scriptfile%
ftp -s:%scriptfile%
del %scriptfile%
FOR %%f IN (*_AutoSave_*.htm) DO (
  del %%f
)
EXIT 0

Фрагменты кода в батнике:
Spoiler: show
Code: Select all
IF EXIST %scriptfile% (
  EXIT 0
)

- Защита от повторного запуска. Но чтобы сработало разница запусков по времени должна быть существенной. На доли секунд не срабатывает.
Spoiler: show
Code: Select all
ping -n 15 127.0.0.1 > NUL

- Задержка чтобы успел сохраниться отслеживаемый файл.
Last edited by DrInch on Fri, 16 Jun 2017, 11:48, edited 1 time in total.
DrInch
 
Posts: 3
Joined: Wed, 14 Jun 2017, 10:11

Re: Отслеживание папки и обработка файлов

Postby AlikasS » Fri, 16 Jun 2017, 11:02

Code: Select all
S" твой_файл" R/W OPEN-FILE-SHARED 0=
IF
CLOSE-FILE DROP
\ файл был успешно открыт
ELSE
DROP
\ файл не открывается, значит кем-то занят, можно встать в цикл для ожидания
THEN
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Отслеживание папки и обработка файлов

Postby DrInch » Fri, 16 Jun 2017, 11:29

Я не могу в скрипте nnCron явно указать свой файл. Я заранее не знаю его имени.
Он изначально создается браузером с именем "AutoSave_NNN.htm" и переименовывается батником, который запускает nnCron в "YYMMDD_HHMMSS_AutoSave_NNN.htm".
NNN - произвольное число
YYMMDD_HHMMSS - текущие дата_время
К тому же файлов может быть несколько одновременно. Отличаться будут только NNN.

Мне не понятно почему не срабатывает START-APPW ?
Ведь должно ждать завершения! Почему оно в принципе повторно запускается?

Может стоит мониторить окно батника по заголовку? И если открыто, то делать выход из скрипта?
Это сработает, если режим окна "Hidden"?
DrInch
 
Posts: 3
Joined: Wed, 14 Jun 2017, 10:11


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot] and 3 guests