BeS Yara
Подскажите пожалуйста, как решить такую нетривиальную задачу:
Есть файл: C:\names.txt, в нем около 5тыс строк с цифрами без разделителей(капс, пробелы, запятые и прочие), т.е. примерно следующее:
23254544
66544886
5466645465
4456645465
.............
Есть много файлов с расширениями .doc, .docx,xls,xlsx и .rtf с произвольными названиями (кириллическими, с пробелами в названии и.т.п). Все они находятся в папке C:\files\*
Я хочу написать скрипт, который будет проверять, присутствуют ли строки файла names.txt в документах и электронных таблицах которые находятся в папке C:\files\*.
Понимаю, что мне нужно огласить два массива: строки из файла names.txt и файлы из папки C:\files\*.
Затем, огласив классы к которым эти массивы принадлежат, нужно огласить цикл внутри цикла с условием: если элемент массива names.txt найден в файле C:\files\1.doc, тогда вывести имя этого элемента и имя файла в лог C:\found.log в виде:
Иначе перейти к внешнему циклу т.е. к следующему файлу.
К сожалению, в vbs рублю на порядок хуже, чем в batch-скриптах, поэтому буду решать свою задачу под присмотром гуру. (Кстати, если у вас есть скрипт, решающий похожую задачу, буду очень благодарен за оказанную помощь).
Пока что имею простенький скрипт, который открывает указанный документ, ищет в нем указанную строку и выводит сообщение в соответствующий лог, который создается в текущей для скрипта папке:
dim oFso, oShell, oShellEnv
set oFso = CreateObject("Scripting.FileSystemObject")
set oShell = WScript.CreateObject("WScript.Shell")
sLogFile1 = sCurFolder & Date() & " FOUND" & ".log" ' лог для найденой строчки
sLogFile2 = sCurFolder & Date() & " NOT FOUND" & ".log" 'лог для не найденой строчки
set oTS1 = oFSO.CreateTextFile(sLogFile1, true) ' true - overwrite
set oTS2 = oFSO.CreateTextFile(sLogFile2, true) ' true - overwrite
Set objWord = CreateObject("Word.Application")
objWord.Visible = False
Set objDoc = objWord.Documents.Open("D:\111\1.doc")
Set objSelection = objWord.Selection
objSelection.Find.Text = "25477191"
objSelection.Find.Forward = TRUE
objSelection.Find.MatchWholeWord = TRUE
If objSelection.Find.Execute Then
oTS1.WriteLine objSelection.Find.Text
Else
oTS2.WriteLine objSelection.Find.Text
End If
objDoc.Close
Осталось совсем "ничего" , огласить 2 массива(для текстового файла, и для папки с документами) и подружить их в двух циклах: первый по очереди ищет строки из текстового файла в документе, второй(внешний) перебирает документы из массива(из папки).