VBS Выводить сообщение, каких файлов не хватает

  • Автор темы Автор темы josh
  • Дата начала Дата начала

josh

Новый пользователь
Сообщения
19
Реакции
0
Вопрос есть скрипт для подсчета файлов, формируется лог .
Нужно: если количество файлов меньше выводить сообщение каких файлов не хватает..(например не 30 а 20)
 

Вложения

Последнее редактирование модератором:
и как мне узнать, каких файлов не хватает?

P.S. Регулярка кривовато составлена.
И зачем там в скрипте проверяется "длина строки < 1300" ?
 
А вот в этом и вопрос, может не хватать любых файлов просто не сформировались и тд. Для этого и требуется, я так думаю создать эталонный файл с актуальной датой, а потом файл подсчета существующих и сравнить (2 файла эталон=файл подсчета) каких файлов нет. Длину строки да можно изменить.
 
На счёт эталона ясно. Вы сами создаетё текстовой файл со списком имён файлов (точных имён? или тоже по какому-то шаблону? )

Но задание все равно слишком неточное.
В том же логе у Вас один и тот же файл повторяется у нескольких отделов:
3. \\10.25.42.8\asu_reports\Daily\ecol_otd\02.08.2016\excel_rpt\t201_CB_d_F_08_02.xls
10. \\10.25.42.8\asu_reports\Daily\metr_otd\02.08.2016\excel_rpt\t201_CB_d_F_08_02.xls
19. \\10.25.42.8\asu_reports\Daily\pro_otd\02.08.2016\excel_rpt\t201_CB_d_F_08_02.xls
28. \\10.25.42.8\asu_reports\Daily\tech_otd\02.08.2016\excel_rpt\t201_CB_d_F_08_02.xls
37. \\10.25.42.8\asu_reports\Daily\tepl_otd\02.08.2016\excel_rpt\t201_CB_d_F_08_02.xls
получается нужно считать как-то не вместе, а по отделам?

И регулярку всё же уточните...
mySet = "y731* y734* y732* y250_1* t201*"
что это означает? Строка постоянно меняется и вы подставляется в таком виде прямо в скрипт из какого-то другого документа?
Что из себя представляет шаблон y731* ? - Имя файл начинается на y731 и продолжается любым кол-вом любых символов?
 
полностью считает файлы
Полностью - это как?
Вот у Вас одно и тоже имя файла присутствует у отделов № 1, 2 и отсутствует у отдела № 3. И что в таком случае делать?

И на остальные вопросы вы ответите, особенно на первый?
 
При каждом пересчете должно быть 98 докуметов как в эталонном файле, если не хватает одного из них выводить кого не хватает (с актуальной датой).
Поэтому нужно сравнить первый лог эталонник с файлами (актуальных дат 98 строк) и второй лог что по факту.
например:
эталон

1. \\10.25.42.8\asu_reports\Daily\ecol_otd\02.08.2016\y731_b400_CB_d_F_08_02

С актуальной датой это как?
Самому нужно подставлять сюда \02.08.2016\ сегодняшнюю дату?
\y731_b400_CB_d_F_08_02 - и сюда?
Или вообще ничего не надо, т.к. эталон всегда будет сам обновляться?
 
В эталонном файле да для сравнения строк. С актуальным числом директив и файлов.
 
Ваш ответ непонятен.
 
Да дату нужно вставлять при формировании эталонного файла в обоих случаях.
 
И здесь замена ....._F_m_d.Строка же должна сопоставляться из эталонника и что присутствует по факту.
 
\RL_t201_u500_08_08_02.xls - получается эта выделенная цифра не имеет отношения к дате?
 
Нет в смысле нет, или да? Если нет, то зачем в таком случае вы мне пишите:
8 часов утра
20 часов вечера
Это как-то относится к заданию?

А как понимать эти ошибки/разночтения в эталоне?
62. \\10.25.42.8\asu_reports\REG_LIST\PR_3\02.08.2016\y731_RL_AT_20_08_02_08
63. \\10.25.42.8\asu_reports\REG_LIST\PR_3\02.08.2016\y731_RL_b400_08_08_02
64. \\10.25.42.8\asu_reports\REG_LIST\PR_3\02.08.2016\y731_RL_b400_20_08_02
65. \\10.25.42.8\asu_reports\REG_LIST\PR_3\02.08.2016\y734_RL_u207_08_02_08
66. \\10.25.42.8\asu_reports\REG_LIST\PR_3\02.08.2016\y734_RL_u207_08_02_20
Если например, подменить даты в двух последних файлах, то получится конфликт - два одинаковых имени файла. Итого общее кол-во файлов для сравнения уже будет другим.

Вообщем, из всех кусочков задания, которые мне пришлось выщипывать из Вас клещами на протяжении 3 недель,
получился вот такой самостоятельный скрипт:

VB.NET / VBA:
'Источник
'sSrcFile = "C:\scripts\log\log1_"& d & "_" & m & "_" & Year(Date) & ".txt"
sScrFile = "C:\Users\tfcor\Desktop\12\log1_08_2016.txt"

'Эталон
sEtalonFile = "C:\Users\tfcor\Desktop\12\ЭТАЛОН_log_02_08_2016.txt"

'Файл-разницы (для записи)
sDiffFile = "C:\Users\tfcor\Desktop\12\Diff_result.txt"

Set oFSO = CreateObject("Scripting.FileSystemObject")

'Чтение файла-этолона
Set oTS = oFSO.OpenTextFile(sEtalonFile, 1, False)
    sEtaAll = oTS.ReadAll()
oTS.Close

'Нормализация путей эталона

' \DD.MM.YYYY\
sCurDate1 = "\" & Right("0" & Day(Now), 2) & "." & Right("0" & Month(Now), 2) & "." & Year(Now) & "\"
' MM_DD
sCurDate2 = Right("0" & Month(Now), 2) & "_" & Right("0" & Day(Now), 2)

Set oRegExp = CreateObject("VBScript.RegExp")
oRegExp.Global = True
oRegExp.MultiLine = True

'замена даты
oRegExp.Pattern = "\\\d{2}\.\d{2}\.\d{4}\\"
sEtaAll = oRegExp.Replace(sEtaAll, sCurDate1)

'удаление нумерации
oRegExp.Pattern = "^\d{1,3}\.\s*"
sEtaAll = oRegExp.Replace(sEtaAll, "")

'замена даты в окончании имени файла
oRegExp.Pattern = "(\d{2}_\d{2})(\..*?)?$"
sEtaAll = oRegExp.Replace(sEtaAll, sCurDate2 & "$2")

aEta = Split(sEtaAll, vbCrLf)

Set oDict = CreateObject("Scripting.Dictionary")
oDict.CompareMode = 1
For i = 0 To UBound(aEta)
    If Len(aEta(i)) <> 0 Then
        If Not oDict.Exists(aEta(i)) Then oDict.Add aEta(i), 0
    End If
Next

'Чтение файла-источника
Set oTS = oFSO.OpenTextFile(sEtalonFile, 1, False)
    aSrc = Split(oTS.ReadAll(), vbCrLf)
oTS.Close

For i = 0 To UBound(aSrc)
    If oDict.Exists(aSrc(i)) Then oDict.Remove (aSrc(i))
Next

If oDict.Count <> 0 Then
    Set oTS = oFSO.OpenTextFile(sDiffFile, 2, True)
    For Each Key In oDict.Keys
        oTS.WriteLine (Key)
    Next
    oTS.Close
End If
 
josh, я не читаю вопросы во вложениях.
Задавайте вопросы согласно регламенту форума в традиционной форме.
 
Назад
Сверху Снизу