Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 12

Скрипт для определения что в папку НЕ пишется файл в течение времени

16.04.2013, 17:04. Показов 1810. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня всем, есть такой скрипт

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
strDir = "c:\камера" ' это каталог, за которым следим
strComputer = "." ' имя компьютера; "." означает текущий компьютер
'================================================= =============================
strDirSlash = Replace(strDir, "\", "\\\\")
strNamespace = "Root\CIMV2"
' Подключаемся к пространству имен
Set objService = GetObject("WinMgmts:\\" & strComputer & "\" & strNamespace)
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")
 
objService.ExecNotificationQueryAsync objSink, _
"SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE " &_
"Targetinstance ISA 'CIM_DirectoryContainsFile' and " &_
"TargetInstance.GroupComponent= " &_
"'Win32_Directory.Name=""" & strDirSlash & """'"
 
' Выводим сообщение о запуске сканера
Wscript.Echo "Запущен сканер создания файла в папке " & strDir
 
' Запускаем бесконечный цикл ожидания
While 1
WScript.Sleep 1000
Wend
 
' Процедура-обработчик события OnObjectReady объекта sWbemSink
Sub Sink_OnObjectReady(oOutParams, oContext)
strResult = Date & " " & Time & vbCrLf &_
"Создан файл: " & oOutParams.TargetInstance.PartComponent
Wscript.Echo strResult
End Sub
он следит за появлением новых файлов в папке и выводит сообщение.
А как его поправить что бы он следил за папкой и подпапками и выводил сообщение о том, что в течение часа не было записи туда то или туда то

Буду очень признателен
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.04.2013, 17:04
Ответы с готовыми решениями:

Скрипт для определения, что пользователь находится в онлайне
Всем здравствуйте, как реалезовать скрипт онлайн пользователя?

Запись в текстовый файл, все что пишется в Консольном приложении через Console.WriteLine
В продожении этой темы: https://www.cyberforum.ru/vb-net/thread2021121.html bd_13 дал мне код, который мониторит папку. вот он: ...

Скрипт, формирующий для вывода определённого сообщения через заданный промежуток времени другой скрипт
Приветствую сообщество CyberForum. Подскажите как реализовать такую задачу. Задача: При запуске скрипта должен формироваться другой...

8
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.04.2013, 23:16
Цитата Сообщение от Volnistiy Посмотреть сообщение
в течение часа
с момента запуска?
Нужно каждый час делать оповещение? (только если не было записи или в любом случае выдавать отчет?)
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
17.04.2013, 07:36
Цитата Сообщение от Volnistiy Посмотреть сообщение
... что бы он следил за папкой и подпапками...
Никак. Механизм подписки на события не поддерживает рекурсивного просмотра объектов. Наблюдать надо за каждой папкой отдельно.
0
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 12
17.04.2013, 13:29  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
с момента запуска?
Нужно каждый час делать оповещение? (только если не было записи или в любом случае выдавать отчет?)
Да да именно так

Добавлено через 3 часа 27 минут
Цитата Сообщение от Volnistiy Посмотреть сообщение
Да да именно так
в только если не было записи
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
17.04.2013, 19:10
Dmitrii, если появится MSGBOX, подписка на событие все еще действует и продолжает отслеживание (т.е. не будет ли пропущено событие)?

Volnistiy, сделал вывод фалов в LOG.
Заново время начинает отсчет, когда Вы нажимаете ОК в MSGBOX-е (он синхронный).

Заменить этим кодом Ваш основной, начиная с 20-й строки:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim isEvent, Secs
While true
  WScript.Sleep 1000
  Secs=Secs+1
  if Secs >= 3600 then
    Secs=0
    Wscript.Echo iif(isEvent,"Появились новые файлы", "Не было новых файлов.")
    isEvent = false
  end if
Wend
 
' Процедура-обработчик события OnObjectReady объекта sWbemSink
Sub Sink_OnObjectReady(oOutParams, oContext)
  CurPath = left(WScript.ScriptFullName, len(WScript.ScriptFullName) - len(WScript.ScriptName))
  Set TextStream = FSO.OpenTextFile(CurPath & "Files.LOG", 8, true)
  strResult = strResult & Date & " " & Time & vbCrLf &_
  "Создан файл: " & oOutParams.TargetInstance.PartComponent & vblf
  TextStream.WriteLine strResult
  TextStream.Close
  isEvent = true
End Sub
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
17.04.2013, 22:43
Цитата Сообщение от Dragokas Посмотреть сообщение
... если появится MSGBOX, подписка на событие все еще действует...
Действует.
Вот только для решения задачи автора темы такой способ (подписка на событие) для работы с одной папкой - нерационален, для работы с деревом папок - бесполезен.
В простейшем случае (в папках файлы могут появляться, но не могут удаляться) достаточно периодического подсчёта количества файлов и сравнения с предыдущим значением. Для более сложных ситуаций можно вести список полных путей к файлам (скажем, с помощью объекта Dictionary).
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
18.04.2013, 00:40
Dmitrii, т.е. рекурсивно перебрать все полные пути, установив на каждый подписку?
Нерационален какого плана? - Альтернативы?
Цитата Сообщение от Dmitrii Посмотреть сообщение
В простейшем случае (в папках файлы могут появляться, но не могут удаляться)
Что имеется в виду?
0
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 12
18.04.2013, 13:30  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Dmitrii, т.е. рекурсивно перебрать все полные пути, установив на каждый подписку?
Да смысл именно не только в корневом каталоге, но и в подкаталогах
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
18.04.2013, 14:04
Даю 95% из 100 за то, что для решения этой задачи подписка на события вообще не нужна. Смысл этого инструментария в том, чтобы обеспечить процедуру оповещения о наступлении события. А здесь-то задача обратная.
Вот пример сценария, который можно ежечасно запускать с помощью планировщика для проверки кол-ва файлов в дереве папок:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Public objFS, strList
Dim objFile, objDict, strFolder, arrFolders(), arrTemp, strTemp, blnIsFirst
 
strFolder = "C:\Temp"
strLog = "Counter.log"
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FolderExists(strFolder) Then
    strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog)
    If objFS.FileExists(strLog) Then
        Set objFile = objFS.OpenTextFile(strLog, 1)
        arrTemp = Split(objFile.ReadAll, vbNewLine)
        objFile.Close
        If StrComp(strFolder, arrTemp(0), vbTextCompare) = 0 Then
            WScript.Echo "Формирование массива данных для сравнения..."
            Set objDict = CreateObject("Scripting.Dictionary")
            objDict.CompareMode = 1
            For i = 1 To UBound(arrTemp)
                If Len(arrTemp(i)) > 0 Then objDict.Add Split(arrTemp(i), "*")(0), CInt(Split(arrTemp(i), "*")(1))
            Next
            ReDim arrFolders(objDict.Count - 1)
            WScript.Echo "Очередной просмотр дерева папок..."
            i = -1
            For Each strTemp In objDict.Keys
                If objFS.GetFolder(strTemp).Files.Count = objDict.Item(strTemp) Then
                    i = i + 1
                    arrFolders(i) = strTemp
                End If
            Next
            If i >= 0 Then
                WScript.Echo "Папки, количество файлов в которых не изменялось (" & i + 1 & "):"
                For i = 0 To UBound(arrFolders)
                    WScript.Echo arrFolders(i)
                Next
            Else
                WScript.Echo "Папок, количество файлов в которых не изменялось, не найдено."
            End If
        Else
            blnIsFirst = True
        End If
    Else
        blnIsFirst = True
    End If
    If blnIsFirst Then
        WScript.Echo "Первичный просмотр дерева папок..."
        strList = UCase(strFolder)
        View_Folder(objFS.GetFolder(strFolder))
        Set objFile = objFS.CreateTextFile(strLog, True)
        objFile.WriteLine strList
        objFile.Close
        WScript.Echo "Готово."
    End If
    Set objFile = Nothing
Else
    WScript.Echo "Не найден путь " & UCase(strFolder)
End If
Set objFS = Nothing
WScript.Quit 0
 
'======
 
Function View_Folder(objDir)
Dim objItem
WScript.Echo objDir.Path
strList = strList & vbNewLine & objDir.Path & "*" & objDir.Files.Count
For Each objItem In objDir.SubFolders
    View_Folder(objItem)
Next
End Function
Сценарий не позволит обнаружить лишь такую ситуацию, когда от одного момента его запуска до другого содержимое папок менялось, но итоговое кол-во файлов осталось прежним. Однако на такой случай можно придумать соответствующую модификацию.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2013, 14:04
Помогаю со студенческими работами здесь

С 8 до 20 часов температура воздуха измерялась ежечасно. Известно, что в течение этого времени температура понижалась. Определите, в котором часу была
Я написала вот так вот, изначально задав данные, но сказали, что нужно писать через массив, помогите пожалуйста #include...

С 8 до 20 часов температура воздуха измерялась ежечасно. Известно, что в течение этого времени температура понижалась. Определите, в котором часу была
Задание 1 С 8 до 20 часов температура воздуха измерялась ежечасно. Известно, что в течение этого времени температура понижалась....

Не работает php-скрипт для выгрузки данных в XML-файл. Просьба глянуть что не так
Не работает php-скрипт для выгрузки данных в XML-файл. Просьба глянуть что не так. Вот скрипт: <?php require_once...

Скрипт для определения браузеров.
Блин, киньте не спецу по JavS ссылку на скрипт - определения браузеров. Именно - Опера, ФайрФокс, Эксплорер и Нетскейп. а то разбиратся...

Дополнение для Visual Studio 2013 для определения среднего времени выполнения метода
Как создать дополнение для студии, чтоыб вместе с надписью о количестве ссылок на метод отображалось среднее время выполнения метода?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru