Обсуждение программ nnCron и nnCron LITE
by wit2006 » Fri, 14 Apr 2017, 06:23
Привет всем. Помогите советом, по форуму ничего не нашел в helpe то же. Задача в следующем, есть папка в неё из почты автоматически выгружаются файлы, файлы с двойным расширением, необходимо отслеживать их поступление и обрабатывать их, то есть убирать двойное расширение оставляя только внутреннее расширение. Как отслеживать поступление у меня вопросов не возникает, возникает сложность в обработке. С Фортом раньше дело не имел. Помогите советом как организовать данную обработку в nnCron/
-
wit2006
-
- Posts: 3
- Joined: Tue, 08 Jul 2014, 13:24
by 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 )#
-

VoidVolker
- Site Admin
-
- Posts: 2930
- Joined: Tue, 25 Apr 2006, 17:56
by wit2006 » Mon, 17 Apr 2017, 11:22
Уважаемый VoidVolker по пробовал ваш вариант но к сожалению не работает, плагин я подключил, но не отрабатывает файлы по этому коду.
-
wit2006
-
- Posts: 3
- Joined: Tue, 08 Jul 2014, 13:24
by 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: 201
- Joined: Mon, 16 Mar 2015, 04:58
by elos » Tue, 18 Apr 2017, 08:45
Что-то про az-строку для FMOVE в файле помощи про это ни слова... Как и в исходниках.
"Везение" - это результат тщательной подготовки, "невезение" - следствие разболтанности и лени. - Роберт Хайнлайн Хорошо сформулированный вопрос отпадает сам собой.
-
elos
-
- Posts: 674
- Joined: Tue, 25 Apr 2006, 11:15
-
by VoidVolker » Tue, 18 Apr 2017, 08:54
dothenДа, правильно, забыл, что CropAfterStringEnd обрезает исходную строку без её копирования. elos wrote:Что-то про az-строку для FMOVE в файле помощи про это ни слова... Как и в исходниках.
Да, это особенность WinAPI - все строки должны оканчиваться нулем, а дополнительных оберток в ннкроне для этого не делается. Поэтому слова, которые используют WinAPI и принимают строки в большинстве своем требуют строку с нулем на конце.
-

VoidVolker
- Site Admin
-
- Posts: 2930
- Joined: Tue, 25 Apr 2006, 17:56
by wit2006 » Thu, 20 Apr 2017, 08:34
Спасибо всем, второй вариант оказался рабочим.
-
wit2006
-
- Posts: 3
- Joined: Tue, 08 Jul 2014, 13:24
by DrInch » Wed, 14 Jun 2017, 10:24
Заранее извиняюсь за возможный повтор вопроса, но ответа не нашел ни здесь, ни в доках, ни в гугле. Сделал запуск по соббытию "создание/изменение файла" - соббытие срабатывает дважды практически одновременно. Похоже, что первый запуск происходит в момент создания файла, а повторный уже при записи в него. Как этого избежать? Включил "Ждать завершения" (START-APPW: приложение) - не помогает. Как сделать, чтобы запускалось только 1 раз по окончании записи в файл?
Главная неприятность в том, что файл после обработки удаляется и иногда выходит так, что успевает обработаться только, что созданный файл нулевого размера и автоудаляется. И данные которые были дописаны в файл, пока шел второй запуск теряются. Второму запуску уже ничего не остается.
-
DrInch
-
- Posts: 3
- Joined: Wed, 14 Jun 2017, 10:11
by elos » Fri, 16 Jun 2017, 08:49
DrInch, откинем описание так и не выложенного кода задачи (что неоднократно напоминается).
Лучше скажи чего ты хочешь от создаваемого файла (какой программой?) Настроек для удаляемого файла никаких в программе нет, чтобы его оставлять? Ещё ничего не зная, предположу возможное использование FILE-EXIST:. А "залочить" его никак, чтобы исключить удаление? С последующим освобождением и ручным (если что) удалением...
А мы коллективно (может быть) подскажем как пойти альтернативным путём...
"Везение" - это результат тщательной подготовки, "невезение" - следствие разболтанности и лени. - Роберт Хайнлайн Хорошо сформулированный вопрос отпадает сам собой.
-
elos
-
- Posts: 674
- Joined: Tue, 25 Apr 2006, 11:15
-
by DrInch » Fri, 16 Jun 2017, 10:30
elosКод стандартный. Авто-создан через GUI. Так, что решил, что нет смысла его постить. Но если интересно - пожалуйста: - 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. По окончании загрузки удаляет управляющий и отслеживаемый файлы. - 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
Фрагменты кода в батнике: - Защита от повторного запуска. Но чтобы сработало разница запусков по времени должна быть существенной. На доли секунд не срабатывает. - Задержка чтобы успел сохраниться отслеживаемый файл.
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
by AlikasS » Fri, 16 Jun 2017, 11:02
- Code: Select all
S" твой_файл" R/W OPEN-FILE-SHARED 0= IF CLOSE-FILE DROP \ файл был успешно открыт ELSE DROP \ файл не открывается, значит кем-то занят, можно встать в цикл для ожидания THEN
-

AlikasS
-
- Posts: 1453
- Joined: Wed, 28 Jun 2006, 05:39
- Location: Khabarovsk
by 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 1 guest
|
|