1 (изменено: sabir.yanin2014, 2016-06-09 19:28:26)

Тема: VBS: Поиск документа Word по ключевым словам в документе

На AHK я написал скрипт выполняющий поиск файлов Word в папках с подпапками по содержащимся в документе
ключевым словам. Все бы хорошо, но на работе компьютеры согласно корпоративной политики защищены от установки посторонних программ, и AHK я не могу установить. Что если написать тот же скрипт но на языке VBS или JS (какой лучше подойдет не знаю)? Вот исходный код:


InputBox, tip, Выберите тип файла, Введите расширение файла`,`nпо умолчанию "doc"
if tip=
tip=doc
MsgBox ".%tip%"
FileSelectFolder, SFolder,  ,  , Выберите папку для поиска
if SFolder=
return
InputBox, wd, Ввод ключей, Введите ключевые слова:`n(ввод через запятую-`nнапример:"желтый`,января`,Иванов`,563")
if wd=
return
Loop, parse, wd, `, ;узнаем количество ключей
{
if (A_Index=1)
Name:=A_LoopField
++N1
} 
MsgBox, 4, Запуск поиска, Все готово для поиска`nВы хотите продолжить?`n(Нажмите Да или Нет)
IfMsgBox No 
return

Loop, %SFolder%\*.%tip%, , 1 ; Рекурсия в подпапки.
{
DirFile=%A_LoopFileFullPath%
oWord:=ComObjCreate("Word.Application")
Word:=oWord.Documents.Open(DirFile)
text:=word.ActiveWindow.Document.Range().Text
Word.Close()
oWord.Quit()
N2=
	Loop, parse, wd, `, ;подбираем ключи
	{
	IfInString, text, %A_LoopField%
	++N2
	}
	
	if (N2=N1)
	{
	FileAppend, %word%`n%DirFile%`n, %A_Desktop%\Поиск %Name%.txt
	Break
	}
}
if (N2=N1)
MsgBox Поиск завершен`nданные сохранены`nна рабочем столе`nв файле Поиск %Name%
else
MsgBox Файл не найден

Если кому то интересно, помогите преобразовать код в VBS( JS) .

2 (изменено: Flasher, 2016-06-08 20:24:09)

Re: VBS: Поиск документа Word по ключевым словам в документе

sabir.yanin2014
Не понимаю, зачем тут return-ы, коли человек закрыл окно и не хочет искать? Я всегда выхожу из скрипта в таких условиях.
И "Все готово для поиска`nВы хотите продолжить?" - это лишнее окно в стиле "Вы точно уверены?" тут зачем?
Всё остальное понятно. Не сказать, что интересно, но помочь могу.

3

Re: VBS: Поиск документа Word по ключевым словам в документе

Flasher
Может Return и надо было заменить на Exit (не судите строго) но эффект тот же скрипт завершает работу. По второму замечанию согласен, окно лишнее.

4 (изменено: Flasher, 2016-06-09 01:01:39)

Re: VBS: Поиск документа Word по ключевым словам в документе

sabir.yanin2014

Set ShAp = CreateObject("Shell.Application")
Set FSO  = CreateObject("Scripting.FileSystemObject")
IBox FiMask, "маски расширений файлов", "';'", "расширений", "*.doc;*.docx;*.rtf"
Set SFolder = ShAp.BrowseForFolder(0, vbCr & vbCr & "Выберите папку для поиска:", 17, ShAp.NameSpace(&H11))
If VarType(SFolder) = 9 Then WScript.Quit
IBox wd, "ключевые слова", "запятую", "ключей", "желтый,января,Иванов,563"
Set oWord = CreateObject("Word.Application") : oWord.Visible = False
Name = "Поиск " & Split(wd,",")(0) & ".txt"
Path = ShAp.NameSpace(&H0).Self.Path & "\" & Name
Set LogFile = FSO.OpenTextFile(Path, 8, True)
FFolder SFolder, Check : Title = " Поиск файлов по ключевым словам" : LogFile.Close
If Check Then
  If MsgBox("Поиск завершен!" & vbCr & vbCr & "Данные сохранены на Рабочем столе" & vbCr &_
  "в файле " & Name & vbCr & vbCr & "Желаете открыть?", 4132, Title) = 6 Then ShAp.Open Path
Else MsgBox "Соответствующие Файлы не найдены!", 4144, Title End If : oWord.Quit

Sub IBox(Var, Text1, Text2, Title, Val)
  Var = Trim(InputBox(String(5, vbCr) & "Введите " & Text1 & " через " & Text2 & ":", " Ввод " & Title, Val))
  If Var = "" Then WScript.Quit
End Sub

Sub FFolder(Folder, Ch)
  Set Items = ShAp.NameSpace(Folder).Items
  Items.Filter 8256, FiMask
  For Each I In Items
    If Left(I.Name, 2) <> "~$" Then
      Set Doc = oWord.Documents.Open(I.Path, False, False)
      Set Sel = oWord.Selection
      For Each Word In Split(wd, ",")
        Sel.Find.Text = Word : Sel.Find.Forward = True
        Sel.Find.MatchWholeWord = False : If Sel.Find.Execute Then _
        LogFile.WriteLine Word & " в " & I.Path : Ch = 1
      Next : Doc.Close
    End If
  Next : Items.Filter 8224, "*"
  For Each Fd in Items
    If FSO.FolderExists(Fd.Path) Then FFolder Fd.Path, Ch
  Next
End Sub

Правда не уверен, что учёт для каждого документа будет многократный.

5 (изменено: sabir.yanin2014, 2016-06-09 19:20:53)

Re: VBS: Поиск документа Word по ключевым словам в документе

Flasher, вы сами проверяли код? У меня почему то не работает. Как правильно вводить маску расширения (я вводил "doc")? Предусмотрена ли рекурсия в подпапки (у меня в коде есть)? Создавал в папке документ Word, в нем писал кодовое слово,  запускал ваш скрипт -указывал эту папку. Результат "Соответствующие файлы не найдены" и всегда создается пустой документ на рабочем столе с названием кодового слова. Помогите пожалуйста довести до ума ваше творение. Еще просьба, не дадите ссылку на англоязычный форум по VBS, очень буду признателен .

6

Re: VBS: Поиск документа Word по ключевым словам в документе

sabir.yanin2014
Проверял. Это скорее даже маски имён. Там же пример масок указан. Если нужно одно расширение, то *.doc вводим.

Дать ссылку несложно (из наших там omegastripes). Только зачем?

7

Re: VBS: Поиск документа Word по ключевым словам в документе

Flasher
В поле выбора писал как вы сказали- не ищет. У меня Windows 10  может поэтому не работает? А ссылку вы мне дали -антивирус ругается.

8

Re: VBS: Поиск документа Word по ключевым словам в документе

sabir.yanin2014
Попробуте поискать в папке с кучей doc-файлов и задайте несколько популярных слов. Будет результат?
10-ки у меня нет. Не знаю, как там.
Ссылка - как ссылка. Ищите проблему на стороне антивируса. В моём браузере (даже при включённом JavaScript) никакой ругани нет. И всё же - зачем английский-то?

9

Re: VBS: Поиск документа Word по ключевым словам в документе

Flasher
Хочу найти какой-нибудь понятный учебник по WSH, где бы мне рассказали разницу между VBS и JS на простых примерах, в таком духе. Так как я в программировании ноль мне нужен какой то указатель чтобы выбрать вектор от простого к сложному.
Как пример могу привести  AHK в котором материал доступно дается.
Что-то такое подскажите .
А насчет вашего кода мы поняли друг друга правильно? - я хочу чтобы скрипт искал документ в тексте которого (не в имени файла) встречается ключевое слово.

10

Re: VBS: Поиск документа Word по ключевым словам в документе

sabir.yanin2014
Почему мы? Код прочёл, там всё доходчиво.

Поди, английский - второй родной, коли учебник на нём понятный? Да и форум - это не учебник всё-таки.
Поиск стоило бы начать отсюда, отсюда и отсюда, ну, и сюда/сюда зайти не помешает. Сравнение (аналог). На выбор.

11

Re: VBS: Поиск документа Word по ключевым словам в документе

Flasher, спасибо!
Скачал учебник Гюнтера Борна "Microsoft Windows Script Host 2.0. Руководство разработчика", буду грызть гранит науки.

12

Re: VBS: Поиск документа Word по ключевым словам в документе

sabir.yanin2014
Если брать VBS, я бы начал с Грошева.