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

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

Ответить
Настройки темы
CMD/BAT - Проверка времени нахождения файла с расширением .eml в папке

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


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

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


День добрый, возможно ли с помощью bat реализовать следующее:
Имеется папка с подпапками и файлами(imap папка), в нее сваливаются сообщения с расширением .eml, если текущее время больше времени создания файла на 5 минут, то это должно записываться в лог файл с указанием времени, даты и имени файла(все имена сообщений уникальны), и далее желательно чтобы этот файл больше не проверялся, иначе как я понимаю лог будет огромный... Заранее огромное спасибо за любую помощь в данном вопросе!

Отправлено: 03:46, 19-08-2014

 

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


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

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


Изображения
Тип файла: jpg 222.jpg
(191.8 Kb, 9 просмотров)

вот с письмами...

Отправлено: 10:46, 19-08-2014 | #11



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

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


Ветеран


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

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


kotlyar, то есть, за файлами во вложенных в «корневой» каталог папках «*-.IMAP» мы не следим, так?

Отправлено: 10:56, 19-08-2014 | #12


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


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

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


да, и за двумя файлами Hiwater.mrk, Imap.mrk, тоже не следим. только за файлами в корне sib.biz.imap

Отправлено: 11:00, 19-08-2014 | #13


Ветеран


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

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


Цитата kotlyar:
да, »
Ясно.

Цитата kotlyar:
и за двумя файлами Hiwater.mrk, Imap.mrk, тоже не следим. »
Ну, это понятно — у них ведь расширение не «.eml».

Что ж, сие гораздо проще. Делаем.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:11, 19-08-2014 | #14


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


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

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


Это радует, жду с нетерпением!)

Отправлено: 10:06, 20-08-2014 | #15


Ветеран


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

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


kotlyar, вот примерная болванка кода:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strSourceFolder

Dim objFSO

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemSink


strSourceFolder = "C:\Песочница\052\sib.biz.imap"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
	strComputer = "."
	
	Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
	Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
	Set objSWbemSink       = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")
	
	With objSWbemServicesEx.Get("Win32_Directory.Name='" & Replace(strSourceFolder & "\.", "\", "\\") & "'")
		objSWbemServicesEx.ExecNotificationQueryAsync objSWbemSink, _
			"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
			"TargetInstance ISA 'CIM_DataFile' AND " & _
			"TargetInstance.Drive = '" & .Drive & "' AND " & _
			"TargetInstance.Path = '"  & .Path  & "' AND " & _
			"TargetInstance.Extension = 'eml'"
		
		Do
			WScript.Sleep 100
		Loop
		
		objSWbemSink.Cancel
		
		Set objSWbemSink       = Nothing
		Set objSWbemServicesEx = Nothing
		Set objSWbemLocator    = Nothing
	End With
Else
	WScript.Echo "Source folder [" & strSourceFolder & "] not found."
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub Sink_OnObjectReady(objSWbemObjectEx, objSWbemAsyncContext)
	With objSWbemObjectEx
		Select Case .Path_.Class
			Case "__InstanceCreationEvent"
				WScript.Echo Now() & " |  | Create:  [" & .TargetInstance.Name & "]"
			Case "__InstanceDeletionEvent"
				WScript.Echo Now() & " |  | Delete:  [" & .TargetInstance.Name & "]"
		End Select
	End With
End Sub
'=============================================================================

Запускать под «cscript.exe». Здесь я сделал просто вывод даты/времени и имени файла для того, чтобы оценить работоспособность скрипта и верность нашего подхода.

Насчёт записи в лог-файл. Писать-то мы можем. Но далее будет проблема, как оттуда корректно и эффективно извлечь эту информацию. Я бы предпочёл писать в базу данных. У Вас есть SQL-сервер? Можем его использовать?
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:25, 22-08-2014 | #16


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


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

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


Да есть, mssql 2008

Отправлено: 01:57, 25-08-2014 | #17


Ветеран


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

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


kotlyar, а приведённый выше скрипт отрабатывает в консоли? Корректно?

Отправлено: 02:52, 25-08-2014 | #18


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


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

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


Еще не проверял, не был на работе сегодня.

Отправлено: 11:02, 25-08-2014 | #19


Ветеран


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

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


kotlyar, здравствуйте. Испытайте пакетный файл:


Код: Выделить весь код
@echo off

set "folder=C:\MDaemon\Public Folders\sib.biz.IMAP"
set span=300
set "mask=*.eml"

echo $$$>"%temp%\$$$1.tmp"
md "%temp%\$$$" 2>nul
:#
dir /a-d/b "%folder%\%mask%" 2>nul| findstr /livg:"%temp%\$$$1.tmp">"%temp%\$$$2.tmp"
(
for /f "usebackq delims=" %%i in ("%temp%\$$$2.tmp") do (
 set /a count+=1
 start "" /b cmd /v:on /c "set date_time=!date! !time!& (for /f %%j in ('set /a span+1') do @ping -n %%j localhost>nul)& (if exist "%folder%\%%i" echo %%i:     !date_time! ... !date! !time!>"%temp%\$$$\!count!.log")& exit /b"
 )
)|| (
for /f %%i in ('
"tasklist| findstr /bil cmd.exe| find /c /v """
') do (
 if %%i leq 2 (
  for /f %%j in ('
  "dir /b "%temp%\$$$"| find /c /v """
  ') do (
   for /l %%k in (1 1 %%j) do (
    type "%temp%\$$$\%%k.log">>"report.log"
    del "%temp%\$$$\%%k.log"
    )
   )
  )
 )
set count=
)
type "%temp%\$$$2.tmp">>"%temp%\$$$1.tmp"
goto:#

.

Отправлено: 00:46, 26-08-2014 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Проверка по названию файлов с расширением dbf FantomasAnand Скриптовые языки администрирования Windows 7 05-06-2014 06:58
CMD/BAT - Проверка в каталогах файлов с расширением .tmp upward Скриптовые языки администрирования Windows 13 19-03-2014 00:48
VBS/WSH/JS - Проверка наличия файла в папке в случае отсутствия перезагружать компьютер NickCom Программирование и базы данных 4 19-08-2013 05:13
CMD/BAT - Проверка времени создания файла havenofear Скриптовые языки администрирования Windows 1 17-06-2012 01:06
CMD/BAT - забирать файлы, с конкретным расширением с Ftp сервера с некоторым интервалом времени n.krivtsov Скриптовые языки администрирования Windows 4 06-08-2010 07:15




 
Переход