1

Тема: vbs: проверка файла по дате в каталоге

Ребята, всем привет. В vbs ни ногой. Поясню проблему. Развернул систему мониторинга на zabbix и хочу с windows хостов дёргать данные по бекапу, с помощью внешнего скрипта, а затем передавать данные в свой zabbix.
Суть такова: есть каталог, куда ежедневно делается бекап, например d:/backup/file1.zip в определённое время суток.
Нужен скрипт, который бы проверил наличие файла в каталоге, сверил бы дату его создания с текущей датой и в случае совпадения двух событий передал бы мне "1" - всё хорошо, или "0" - всё плохо.
Присматривал скрипты на форуме, да чётко таких нет, а под себя переделать пока уровень знания языка не позволяет.
Заранее спасибо

2

Re: vbs: проверка файла по дате в каталоге

Расскажите, что Вы подразумеваете под:

…передал бы мне…

?

3

Re: vbs: проверка файла по дате в каталоге

alexii пишет:

Расскажите, что Вы подразумеваете под:

…передал бы мне…

?

Я имею ввиду вывод работы скрипта. Завершился, проверив файл - 1, не подтвердил наличие - 0

4

Re: vbs: проверка файла по дате в каталоге

Обычно поступают наоборот: 0 — успех, всё, что больше нуля — свидетельствует о той или иной ошибке. Но как скажете (не проверялось):

Option Explicit

Dim strPath
Dim lngErrCode


strPath = "d:\backup\file1.zip"

With WScript.CreateObject("Scripting.FileSystemObject")
    If .FileExists(strPath) Then
        WScript.Echo "File [" & strPath & "] exists."
        
        If DateDiff("d", objFSO.GetFile(strPath).DateCreated, Now()) = 0 Then
            WScript.Echo "Creation date of file [" & strPath & "] is today."
            lngErrCode = 1
        Else
            WScript.Echo "Creation date of file [" & strPath & "] is not today."
            lngErrCode = 0
        End If
    Else
        WScript.Echo "File [" & strPath & "] not found."
        lngErrCode = 0
    End If
End With

WScript.Quit lngErrCode

5

Re: vbs: проверка файла по дате в каталоге

alexii пишет:

Обычно поступают наоборот: 0 — успех, всё, что больше нуля — свидетельствует о той или иной ошибке. Но как скажете (не проверялось):

Option Explicit

Dim strPath
Dim lngErrCode


strPath = "d:\backup\file1.zip"

With WScript.CreateObject("Scripting.FileSystemObject")
    If .FileExists(strPath) Then
        WScript.Echo "File [" & strPath & "] exists."
        
        If DateDiff("d", objFSO.GetFile(strPath).DateCreated, Now()) = 0 Then
            WScript.Echo "Creation date of file [" & strPath & "] is today."
            lngErrCode = 1
        Else
            WScript.Echo "Creation date of file [" & strPath & "] is not today."
            lngErrCode = 0
        End If
    Else
        WScript.Echo "File [" & strPath & "] not found."
        lngErrCode = 0
    End If
End With

WScript.Quit lngErrCode

Честно говоря не особо важно, нолик будет или единичка
Спасибо вам огромное, побегу тестить Отпишусь)

6

Re: vbs: проверка файла по дате в каталоге

Получается вот что. Скрипт запускается, проверяет наличие файли и говорит что он "exist"
Затем судя по скрипту должен запуститься цикл на "0" и "1", и тут происходит ошибка
Строка 13; Символ 9. Переменная objFSO не определена, код 800A01F4

7

Re: vbs: проверка файла по дате в каталоге

Издержки интерпретации. Вот что значит не проверять код полностью.

Уберите «objFSO» из указанной строки, чтобы она выглядела так:

If DateDiff("d", .GetFile(strPath).DateCreated, Now()) = 0 Then

8

Re: vbs: проверка файла по дате в каталоге

Спасибо Вам огромное теперь всё кул.
Я правильно понимаю, чтоб убрать вывод на экран сообщения после каждого выполнения цикла, мне нужно исключить из скрипта WScript.Echo?

9

Re: vbs: проверка файла по дате в каталоге

Угу. Либо запускать с параметром «//b»:

 //B            Пакетный режим: подавляются отображение ошибок и запросов сценария

10

Re: vbs: проверка файла по дате в каталоге

Alexii
ищу такую тему очень давно... а вот можно доработать этот скрипт под такую вещь...
есть ip-camera которая пишет файлы кусками по 10мин. и вот тут надо отследить такой момент, скрипт запускается раз в 10 мин с помощью планировщика и смотрит, если в течение 10 мин новый файл появился то 0, иначе создает лог, например 1.txt и дальше я его отсылаю по почте своей программкой. возможно такое?

11

Re: vbs: проверка файла по дате в каталоге

Подробности того, что, как и куда пишется.

12

Re: vbs: проверка файла по дате в каталоге

volnistiy пишет:

...
скрипт запускается раз в 10 мин с помощью планировщика и смотрит, если в течение 10 мин новый файл появился то 0, иначе создает лог, например 1.txt
...

Мне казалось, что при запуске планирощиком такое простым батником можно сделать, с таким алгоритмом:
- создать первоначальный список файлов папки - пустой текст.файл, например, c:\log\list_old.txt;
- вывод списка файлов папки камеры командой "dir" в текст.файл, например, c:\log\list_now.txt;
- формирование лога различий командой "fc" между текст.файлами c:\log\list_now.txt и c:\log\list_old.txt в файл c:\log\list_new.txt;
- т.к. в лог различий попадают лишние данные, то командой "find" оставляем в логе только строки с символами присущими только строкам файлов (например, начало года ".201" либо еще что-то).
- переименование текущего списка в старый - для будущих сравнений - "rename c:\log\list_now.txt list_old.txt";

т.е. батник приблизительно таков:


::: вывод списка только файлов папки камеры с сортировкой по дате - list_now.txt
DIR /a-d /od /-c "c:\camera\*.*" > "c:\log\list_now.txt"

::: если предыдущего списка list_old.txt еще нет - создаем пустой
IF NOT EXIST "c:\log\list_old.txt" ECHO. > "c:\log\list_old.txt"

::: сравнение файлов и вывод различий в list_new.txt
IF EXIST "c:\log\list_new.txt" DEL "c:\log\list_new.txt"
FC /L /C /N "c:\log\list_old.txt" "c:\log\list_now.txt" > "c:\log\list_new.txt"

::: усечение файла различий (поиск по наличию фразы начала года в дате файла) 
::: в файл для отправки - list_send.txt
FINDSTR /C:".201" "c:\log\list_new.txt" > "c:\log\list_send.txt"

::: переименование списка для дальнейших сравнений
DEL "c:\log\list_old.txt"
REN "c:\log\list_now.txt" "list_old.txt"

Единственный глюк не удалось на тесте победить - в силу того, что при FC-сравнении в лог различий дважды попадает строка, с которой файлы начинают различаться, то в отправляемом протоколе при наличии новых файлов всегда будет дублирующаяся строка последнего файла от предыдущей проверки.

WBR. Roman

13 (изменено: volnistiy, 2013-04-18 12:33:54)

Re: vbs: проверка файла по дате в каталоге

alexii пишет:

Подробности того, что, как и куда пишется.

Есть каталог и подкаталоги в нем, в них камеры пишут свои файлы (их(камер) несколько и пишутся они в разные подкаталоги) они пишут файлы раз в 10 мин. т.е. подкаталог пополняется на 1 файл раз в 10 мин. Так вот нужен скрипт который запускается раз в 10 мин и смотрит по подкаталогам за наличием нового файла... если новый появился то, 0 иначе формировать текстовый файл например 1.txt этот файл будет означать что одна или несколько камер не записали файл а значит не работает

Rom5
Спасибо за отклик, Ваше предложение тоже как вариант можно попробовать

14

Re: vbs: проверка файла по дате в каталоге

volnistiy пишет:
alexii пишет:

Подробности того, что, как и куда пишется.

Есть каталог и подкаталоги в нем, ...
Rom5
Спасибо за отклик, Ваше предложение тоже как вариант можно попробовать

Раз есть подкаталоги (Вы бы уже озвучили имя родительской для них папки), то в команду DIR добавьте ключи "/s /b", а т.к. ключ "/b" выведет список всех файлов с указанием пути, но без указания аттрибутов размера-даты, то усечение (команда FINDSTR /C:".201") протокола различий делайте не по ".201", а по части пути либо даже имен файлов - Вы бы привели для понимания образец имен создаваемых файлов...

WBR. Roman