Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Контроль обработки файла

Ответить
Настройки темы
CMD/BAT - [решено] Контроль обработки файла

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго дня!

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

Отправлено: 13:24, 25-10-2016

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 13:52, 25-10-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


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

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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-10-2016 в 14:40.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:33, 25-10-2016 | #3


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Простите, что плохо расписал задачу
есть 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 ?

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

Отправлено: 13:20, 07-11-2016 | #4


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:22, 07-11-2016 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:46, 07-11-2016 | #6


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Цитата buravchik256:
Файла запроса имеет вид 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.
Сделайте детальное описание каждого шага, чтобы не надо было ничего домысливать.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:40, 07-11-2016 | #7


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:07, 08-11-2016 | #8


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Вот решение в первом приближении. Уточните пути к каталогам
Код: Выделить весь код
@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 можно удалить. У меня это закомментировано и не работает - можете исправить сами.
Опять же, необработанные запросы можно вернуть ручками во входной ящик почты для повторной обработки, если это не нарушает корректной работы обработчика. Вам виднее.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 09-11-2016 в 10:45.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:19, 08-11-2016 | #9


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всё работает, спасибо большое! Гляньте ЛС.

Отправлено: 12:48, 11-11-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Контроль обработки файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Устройст800о обработки изображений tobolak Поиск драйверов, прошивок и руководств 2 16-11-2013 10:57
Конфигурация для обработки фотографий Stabilo1838 Выбор отдельных компонентов компьютера и конфигурации в целом 7 22-08-2012 12:14
VBS/WSH/JS - [решено] Скрипт для обработки текстогового файла! Nastasya Скриптовые языки администрирования Windows 4 23-05-2011 21:29
ПК для обработки видео cheslav1 Выбор отдельных компонентов компьютера и конфигурации в целом 3 13-11-2010 07:19
CMD/BAT - [решено] Как исключить обработку одного exe-файла из пакетной обработки нескольких файлов? Nun-Nun Скриптовые языки администрирования Windows 2 14-05-2009 12:16




 
Переход