Войти

Показать полную графическую версию : [решено] Контроль обработки файла


buravchik256
25-10-2016, 13:24
Доброго дня!

Есть 2 папки. В первую поступает файл-запрос, этот файл удаляется из папки, обрабатывается и во вторую папку выкладывается файл-ответ.
Подскажите как можно (желательно средствами cmd) проконтролировать что на поступивший запрос в течение определенного времени поступил ответ?

Elven
25-10-2016, 13:52
Для автоматизации действий, нужно четко представлять что именно нужно автоматизировать. Пока, я так вижу, посредством посредственной телепатии выясняется, что "на поступивший запрос в течение определенного времени поступил ответ". Как выглядит файл-запрос, как он связан с файлом-ответом, как определить что первому соответствует второй а не какой-то там абстрактный третий?

megaloman
25-10-2016, 14:33
(1)--- В первую поступает файл-запрос
Имя файла?
(2)--- этот файл удаляется из папки
По моему скромному мнению этот файл просто удалять нельзя, его надо во время обработки скопировать (или переместить) в третью архивную папку. О чем сделать запись в лог-файл. Не может быть, что он сначала удаляется, а потом обрабатывается, как это Вы описали.
(3)--- во вторую папку выкладывается файл-ответ.
Чем запускается обработка? Имя файла? ИМХО, обработка должна запускаться батником, и это действие должно попасть в лог-файл.
(4)--- проконтролировать что на поступивший запрос в течение определенного времени поступил ответ
Это можно сделать, если имя файла-ответа каким-то образом соответствует файлу-запроса. Иначе только анализом лог-файла.
В лог-файле запись типа: Время, взяли файл-запрос(имя), получили файл-ответ(имя). Это может быть реализовано в п. (3)

Подозреваю, файл-ответ тоже не должен задерживаться в папке, он должен куда-то уйти? То есть, факт его формирования должен быть сразу же зафиксирован в лог-файле.
Надо больше инфы о задаче ...

buravchik256
07-11-2016, 13:20
Простите, что плохо расписал задачу
есть 2 каталога req_dir и cert_dir

Файла запроса имеет вид 1234.req, помещается в каталог req_dir. Каждые 2 минуты запускается задание в планировщике перемещающее файл 1234.req для дальнейшей обработки (обычный bat-файл командой move). С дальнейшей обработкой файла всё ок.

Через некоторое время (допустим не более 2-х минут) в папку cert_dir должен прийти файл 1234.cer (имя файла то же что и у запроса. Приходит если специализированное ПО не зависло). То же задание из планировщика перемещает в файл ответа из папки cert_dir.


Как можно проконтролировать что в течение 2-х минут после перемещения файла 1234.req появился файл 1234.cer ?

Заранее спасибо

alpap
07-11-2016, 14:22
buravchik256,
а так, пойдет?

@echo off
for /l %%a in () do >nul timeout /t 1 /nobreak& if exist "cert_dir\1234.cer" if exist "reg_dir\1234.reg" echo Это подходящее условие& pause

Iska
07-11-2016, 14:46
Как можно проконтролировать что в течение 2-х минут после перемещения файла 1234.req появился файл 1234.cer ? »
В тот же пакетный файл, где и move, добавить двухминутное ожидание (timeout /t 120) и проверку на существование файла (if exist … move …).

megaloman
07-11-2016, 21:40
Файла запроса имеет вид 1234.req Он всегда имеет имя 1234.req, или следующий будет, например, 1235.reg. То есть, имя файла запроса уникально или каждый раз это имя неизменно? Или, если это имя неизменно, можно ли его при перемещении для программы обработки переименовать? И при этом программа обработки как наименует ответный файл: с новым именем или со старым?

Давайте пошагово уточним прохождение файлов. Попытаюсь, частично цитируя Ваше пояснение, уточнить описание процесса.
Запрос 1234.reg приходит в каталог req_dir.
Каждые 2 минуты задание перемещает 1234.req для обработки батником (условно назовём kuku.bat) командой move. Куда? В некий каталог обработчика (условно InSoft)?? Кто удаляет файл 1234.req из InSoft?
В папку cert_dir (это выходная папка обработчика?) должен прийти файл 1234.cer
То же задание (какое? kuku.bat ?) перемещает в файл ответа (Куда?) из папки cert_dir.
Сделайте детальное описание каждого шага, чтобы не надо было ничего домысливать.

buravchik256
08-11-2016, 11:07
megaloman,

Запрос имеет вид [NNNN].req, следующий файл запроса будет иметь имя [NNNN+1].req. Имя запроса файла инкреминируется, расширение файла всегда одно - *.req
Ответ на запрос имеет тоже имя файла, но с расширением *.cer - [NNNN].cer , [NNNN+1].cer
Если имя файла запроса [NNNN].req равно имени файла ответа [NNNN].cer - то они соответствуют друг другу.
NNNN - целое число, ограничения длины нет. К примеру текущий номер шестизначный.

Пошагово:
Запрос 1234.req приходит в каталог req_dir.
Каждые 2 минуты включается задание KUKU.bat:
- перемещает файлы *.req (в данном случае 1234.req) командой MOVE из req_dir в сетевой каталог обработчика \\Server\Import
- перемещает файлы *.cer (в данном случае файл будет иметь имя 1234.cer ) командой MOVE из из сетевого каталога обработчика \\Server\Export в каталог cert_dir
Примечание: файл \\Server\Export\1234.cer появляется не мгновенно,а примерно через 30-60 секунд.

Обработчик получающий файл \\Sever\Import\1234.req забирает информацию о запрсе себе в базу, более файл в каталоге не хранит.
Обработчик выкладывает результат в папку \\Server\Export (оттуда файл 1234.cer будет перемещён заданием KUKU.bat в папку cert_dir)

После появления файла 1234.cer в каталоге cert_dir файл обрабатывается уже другой машиной (отрабатывает своё задание на другой машине).

Хочу проверить что обработчик в течение 2-х(3-х) минут выложил результат 1234.cer соответствующий запросу 1234.req

megaloman
08-11-2016, 21:19
@Echo Off

Set "MailIn=Z:\req_dir"
Set "MailOut=Z:\cert_dir"
Set "MailArc=Z:\Box_Arc"

Set "ExtIn=reg"
Set "ExtOut=cer"
Set "ExtOk=OK"

Set "SoftIn=\\Server\Import"
Set "SoftOut=\\Server\Export"

If Not Exist "%MailArc%" Md "%MailArc%"

If Exist "%SoftOut%\*.%ExtOut%" (
FOR %%f IN ("%SoftOut%\*.%ExtOut%") DO (
If Exist "%MailArc%\%%~nf.%ExtIn%" Ren "%MailArc%\%%~nf.%ExtIn%" %%~nf.%ExtIn%.%ExtOk%"
Move /Y "%%f" "%MailOut%\" >nul
)
)

TASKKILL /F /IM notepad.exe >nul 2>nul
Del "%MailArc%\___%~nx0.log"

Pushd "%MailArc%"
FOR /F "usebackq delims=" %%i IN (`Dir "%MailArc%\*.%ExtIn%" /B /A:-D /O:-D 2^>nul`) DO Echo %%~ti %%i Request unanswered >>"%MailArc%\___%~nx0.log"
Popd

If Exist "%MailIn%\*.%ExtIn%" (
Copy "%MailIn%\*.%ExtIn%" "%MailArc%\" >nul
Move /Y "%MailIn%\*.%ExtIn%" "%SoftIn%\" >nul
)

rem Del "%MailArc%\*.%ExtOk%" 2>nul

If Exist "%MailArc%\___%~nx0.log" START "unanswered" /MAX Notepad.exe "%MailArc%\___%~nx0.log"
Как работает батник:
1. Удаляем вспомогательный log-файл (если он есть) из архивной папки.

2. При наличии в выходном каталоге обработчика файла, например, 1234.cer, переименовывается файл в архивной папке 1234.reg в 1234.reg.ok. Это свидетельствует о том, что выходной файл на этот запрос получен.
Перемещаем 1234.cer в выходной каталог почты.

3. Просматриваем архивную папку на наличие файлов *.reg. Если такие файлы существуют, то их имя записываем в log-файл. В норме, если на все запросы получены ответы, таких файлов нет: все они переименованы в *.reg.ok или вообще удалены за ненадобностью.

4. Пришедшие во входную папку почты файл *.reg копируются в архивную папку и перемещаются во входную папку обработчика.

5. Log-файл, если существует (если имеются необработанные файлы), отображается в notepad.exe

Конечно, можно notepad.exe не использовать, а применить какой-нибудь мессенджер. Когда-то я пользовался командой Net send. Но тут уже надо развивать задачу под Ваши конкретные условия.
В принципе, все файлы *.ok можно удалить. У меня это закомментировано и не работает - можете исправить сами.
Опять же, необработанные запросы можно вернуть ручками во входной ящик почты для повторной обработки, если это не нарушает корректной работы обработчика. Вам виднее.

buravchik256
11-11-2016, 12:48
Всё работает, спасибо большое! Гляньте ЛС.




© OSzone.net 2001-2012