@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
SET "lastdate="
FOR /f %%a IN ('dir /b /o:-n /a-d "%sourcedir%\LOG_2*"') DO SET "lastfile=%%a"&GOTO scan
:scan
SET "today=%lastfile:~4,8%"
SET "lastfile=%lastfile:~4,12%"
SET /a yesterday=today
:: subtract 1 day from today. if last 2 digits are 00, -68=yyyymm32
:: keep subtracting until logfile found to cater for short months.
:prevday
SET /a yesterday -=1
IF %yesterday:~-4%==0100 SET /a yesterday -=8868&GOTO prevday
IF %yesterday:~-2%==00 SET /a yesterday -=68&GOTO prevday
IF NOT EXIST "%sourcedir%\LOG_%yesterday%*" GOTO prevday
FOR %%a IN (expected found missing) DO SET /a %%a=0
FOR /L %%h IN (100,1,123) DO FOR %%m IN (00,15,30,45) DO CALL :check %yesterday% %%h%%m
SET "reportline=Yesterday %yesterday% expected %expected% found %found% missing %missing%"
FOR %%a IN (expected found missing) DO SET /a %%a=0
FOR /L %%h IN (100,1,123) DO FOR %%m IN (00,15,30,45) DO CALL :check %today% %%h%%m
ECHO %reportline%
ECHO Today %today% expected %expected% found %found% missing %missing%
ECHO Last filedatetime found %lastfile%
GOTO :EOF
:check
SET checkstamp=%2
SET checkstamp=%1%checkstamp:~-4%
IF x%checkstamp% gtr x%lastfile% GOTO :EOF
SET /a expected +=1
IF EXIST "%sourcedir%\LOG_%checkstamp%*" (SET /a found +=1
) ELSE (SET /a missing+=1
ECHO Missing : %checkstamp%)
GOTO :eof
Я достаточно уверен, что это будет сообщать соответствующим образом. Вам нужно будет изменить настройку sourcedir
в соответствии с вашими обстоятельствами.
Имя последнего файла журнала определяется путем чтения каталога для сопоставления имен, сортировки в порядке обратного имени и выбора возвращаемого имени.
«сегодня» определяется путем выбора из 12 символов от этого имени, начиная с «символа 4» (считая 1-й, как «символ 0»)
«вчера» определяется путем вычитания 1 из этой даты. Если результирующая строка заканчивается «0100», то вычесть 8868, чтобы сформировать 32 декабря в предыдущем году, иначе, если «сегодня» заканчивается «00», вычесть 68 для получения 32-го числа предыдущего месяца. Если для даты, рассчитанной как «вчера», нет файла журнала, найденного путем наложения «LOG_» перед значением «вчера» и проверки имени файла, начинающегося с этой строки, затем продолжайте вычитать 1 со вчерашнего дня, пока не будет найдено имя файла , Таким образом, «31 февраля» не будет найдено ни 30-го, ни 29-го (вероятно), а 28-го будут найдены, например. SO Today = 1 марта, вчера = 28 февраля или 29-го.
Тогда это просто вопрос проверки имени файла запуска «LOG_YYYYMMDDHHQQ» - YYYYMMDD в today
или yesterday
, HH является 00..23 и QQ является 00,15,30 или 45. Имея час в %%h
итерированным из От 100 до 123, а затем зацикливание с цифрой минут означает, что второй параметр, подаваемый в подпрограмму check
, имеет форму 10000
.. 12345
с 15-минутными шагами. Удалите ведущий 1
и поместите результат в «LOG _» + соответствующий день и проверьте файл, который начинается с этой строки. Либо он есть, либо нет.
Поворот в том, что если дата + время, которое необходимо проверить, позднее последней даты + времени (в lastfile
), то это будущее имя файла (например, сегодня 5 вечера, но сейчас только обед), поэтому мы просто пропускаем проверка и подсчет.
Настоящий изгиб здесь состоит в том, что значения, которые нужно сравнить, - это> 2147483647, поэтому мы должны принудительно ввести if
в алфавитном режиме, включив в число строк, не сравнимых с числами.
Пример:
Directory of U:\sourcedir\t w o
21/01/2015 14:49 0 log_20150120230016.txt
21/01/2015 14:49 0 log_20150121011501.txt
2 File(s) 0 bytes
0 Dir(s) 2,126,053,376 bytes free
список каталогов, показывая два имени в логах в указанном формате. Последний - log_20150121011501
, который является «сегодня»: 20150121 в 0115. Другой для «вчера»: 20150120 в 2300.
Обычно 4 * 24 = 96 файлов производятся за 1 день. Это должно сохраняться в течение дня, кроме , сегодня. За вчерашний день осталось только один файл, поэтому 95 отсутствуют.
На сегодняшний день мы можем только быть уверены, что лог-файлы были созданы до 01:15. Мы можем запустить это в 01:17, так что вполне разумно ожидать, что не есть файлы сегодняшнего дня после 01:15. Это будет 6 файлов на сегодня (0000, 0015, 0030, 0045, 0010, 0015). 1 присутствует, 5 отсутствуют.
Результаты этой процедуры не являются: (нет смысла их все перечисления)
...
Missing : 201501202230
Missing : 201501202245
Missing : 201501202315
Missing : 201501202330
Missing : 201501202345
Missing : 201501210000
Missing : 201501210015
Missing : 201501210030
Missing : 201501210045
Missing : 201501210100
Yesterday 20150120 expected 96 found 1 missing 95
Today 20150121 expected 6 found 1 missing 5
Last filedatetime found 201501210115
Поскольку 201501202300
присутствует, это не показано на missing
списке.
из 96 ожидаемых файлов за вчерашний день, 1 не найдено, 95 отсутствуют (и перечислены)
Из 6 ожидаемых файлов на сегодня 1 присутствует и 5 отсутствуют и перечислены.
Тот факт, что отчет показывает 2012215
означает, что есть какая-то проблема с построением файла, но вы не сообщили последние строки, которые будут отображаться датами, рассчитанные для today
и yesterday
. Я по-прежнему почему-то не вижу файлы в вашем каталоге, поэтому я не могу их анализировать. Процедура основана на том, что в каталоге содержится более одного дня logfilenames для вычисления yesterday
.
Сколько еще раз вам нужно попросить РЕДАКТИРОВАТЬ запрошенные данные в ваш вопрос, не добавить его как «ответ», чтобы быть удалены модераторами?
Сколько еще раз вам нужно сказать, что эта процедура зависит от наличия по крайней мере двух дат на лог-файлах? У вашего последнего списка все одинаковые даты.
Сколько еще раз нужно просить предоставить последние строки отчета, которые показывают определение процедуры для даты и сегодня и вчера?
Вот список каталогов исходного списка журналов. Я удалил один файл, LOG_201501190245.txt для демонстрации. Обратите внимание, что в списке есть файлы, созданные как с 18 по 19 января.
Volume in drive U has no label.
Volume Serial Number is 02F1-3000
Directory of u:\sourcedir\t w o
21/01/2015 16:22 0 LOG_20150118210000.txt
21/01/2015 16:22 0 LOG_20150118211501.txt
21/01/2015 16:22 0 LOG_20150118213000.txt
21/01/2015 16:22 0 LOG_20150118214501.txt
21/01/2015 16:22 0 LOG_20150118220000.txt
21/01/2015 16:22 0 LOG_20150118221500.txt
21/01/2015 16:22 0 LOG_20150118223000.txt
21/01/2015 16:22 0 LOG_20150118224500.txt
21/01/2015 16:22 0 LOG_20150118230001.txt
21/01/2015 16:22 0 LOG_20150118231500.txt
21/01/2015 16:22 0 LOG_20150118233001.txt
21/01/2015 16:22 0 LOG_20150118234500.txt
21/01/2015 16:22 0 LOG_20150119000001.txt
21/01/2015 16:22 0 LOG_20150119001500.txt
21/01/2015 16:22 0 LOG_20150119003001.txt
21/01/2015 16:22 0 LOG_20150119004500.txt
21/01/2015 16:22 0 LOG_20150119010000.txt
21/01/2015 16:22 0 LOG_20150119011501.txt
21/01/2015 16:22 0 LOG_20150119013000.txt
21/01/2015 16:22 0 LOG_20150119014501.txt
21/01/2015 16:22 0 LOG_20150119020000.txt
21/01/2015 16:22 0 LOG_20150119021500.txt
21/01/2015 16:22 0 LOG_20150119023000.txt
21/01/2015 16:22 0 LOG_20150119024500.txt
21/01/2015 16:22 0 LOG_20150119030000.txt
21/01/2015 16:22 0 LOG_20150119031501.txt
26 File(s) 0 bytes
0 Dir(s) 2,134,638,592 bytes free
Вот результат со временем на Jan 18 между 01:00 и 20:15 отредактирован-выход:
Missing : 201501180000
Missing : 201501180015
Missing : 201501180030
Missing : 201501180045
... (edited-out : 76 lines)
Missing : 201501180030
Missing : 201501180045
Missing : 201501182030
Missing : 201501182045
Missing : 201501190245
Yesterday 20150118 expected 96 found 12 missing 84
Today 20150119 expected 14 found 13 missing 1
Last filedatetime found 201501190315
Итак - 84 линии сообщил на 18, говорится в докладе, что именно.
Из 14 ожидаемых линий между 00:00 и 03:15, один отсутствует - 02:45, как сообщалось.
Важно, чтобы вырезать и вставлять, а не повторно, поскольку синтаксис пакета специфичен, и одна опечатка может вызвать хаос. Все, что вам нужно сделать, это заменить имя каталога на имя каталога, которое вы используете.
Если у вас есть дополнительные проблемы, просто вырежьте фактический код, который вы используете, и вставьте его в исходный вопрос с соответствующим образцом результатов. Достаточно двух или трех «пропущенных» строк, но последние 3 строки являются критическими.
Вы должны отправить код, который вы пробовали. –
Hi Jason, У меня пока нет кодов. Сможете ли вы помочь? Благодарю. – Peter