1 (изменено: texnar, 2015-06-21 10:54:44)

Тема: CMD/BAT: Батник поиска

Описание:

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

Примечания:

Слов для поиска много 100+ компьютер не должен уходить в ступор на полдня. Скрипт аналог Windows Search с настройками по умолчанию + галочка "Всегда искать по именам файлов и содержимому".

Пример:

dipl OR курс должен найти все папки и файлы с именами и содержимым diplom и курсовая с сохранением результатов поиска в текстовый файл в виде путей\имен файлов и папок. Пример вывода:

C:\Rostik\Admin\Desktop>Diplom
C:\Rostik\Admin\Desktop>Задание\Курсовая.docx

Мои самостоятельные попытки создать батник

DIR C:\ /S /B | FINDSTR /I "dipl курс">>result.txt

Недостатки:

1. Проблеммы с русской кодировкой
2. Не ищет в содержимом файлов
3. Ищет только в C:\

Кто готов исправить батник за буду только рад.

Финансовая политика - бюджет и условия называете сами.

Всем спабо вопрос решен!

2

Re: CMD/BAT: Батник поиска

Мои самостоятельные попытки создать батник

DIR C:\ /S /B | FINDSTR /I "dipl курс">>result.txt


Абсолютно некорркетный подход, так как будут найдены и все файлы и папки, у которых соответствие с поисковыми шаблонами будет не только в имени, но и в пути, например, такой файл:

C:\dipl\абракадабра.txt

.




1. Проблемы с русской кодировкой



Для различных версий утилиты "findstr.exe" эта проблема решается по-разному. Более-менее универсальным решением является использование списка шаблонов поиска в текстовом файле в обычной кодировке ("Win-1251").




2. Не ищет в содержимом файлов


И не будет искать, потому что для этого нужен другой механизм поиска:

>"result.txt" findstr/imls "dipl курс" "C:\*.txt"

.
Кстати, этот код также может работать с багами, даже не связанными с поиском кириллических строк, и не находить файлы. Поэтому лучше использовать цикл с "FOR" для поиска в каждой папке, выведенной командой "DIR" с ключом "/S" для рекурсивного отображения.




3. Ищет только в C:\


Поиск по всем возможным дискам:

>"result.txt" (for /l %%i in (65 1 90) do @cmd/c exit/b %%i& 2>nul cmd/v/c dir/a/b/s "!=ExitCodeAscii!:\*dipl*")

.
Также пример подобного кода можете увидеть в теме "CMD/BAT: Как прописать все диски?".




в содержимом... офисных файлов


Невозможно.




Слов для поиска много 100+ компьютер не должен уходить в ступор на полдня.


Вы не должны что-то искать в содержимом абсолютно всех файлов, а искать только в файлах с определёнными расширениями или, наоборот, исключать из поиска файлы с какими-то расширениями.




Финансовая политика - бюджет и условия называете сами.


$300... Не-а... $310... Каждому!

3 (изменено: Flasher, 2015-06-21 00:02:15)

Re: CMD/BAT: Батник поиска

Yury пишет:

Невозможно.

Там ещё скрипт был указан, т.ч. возможно. Правда, только с версией офиса ниже 2007...

4 (изменено: wisgest, 2015-06-22 19:14:52)

Re: CMD/BAT: Батник поиска

Как я понимаю использование именно пакетных файлов необязательно.

Доработал на Autohotkey в сторону полной автоматизации решение из темы VBScript: Работа с проводником Windows (поиск файлов), можно переписать и на JScript/VBScript с использованием AutoItX3.Control.

Решение приведено для русской Windows XP, для более поздних версий, вероятно будут другие номера и текст элементов управления...

Поиск по файлам Office 2010 работает (проверил только для Word).

#NoEnv
; Исходные данные
SearchPath = D:\Sandbox
SearchQuery = hello world

; Создаём скрытое окно Проводника и открываем в нём папку, в которой надо искать
ExplorerWindow := ComObjGet("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
ExplorerWindow.Navigate(SearchPath)
while (ExplorerWindow.Busy)
    Sleep 1

; Подстройка вида поиска
RegWrite REG_DWORD, HKCU, Software\Microsoft\Search Assistant
    , UseAdvancedSearchAlways, 1

; Управляем окном Проводника, подражая действиям пользователя
DetectHiddenWindows On
WinTitle := "ahk_id " . ExplorerWindow.HWND
;    Открываем по F3 панель "Поиск"
ControlSend, , {F3}, %WinTitle%        
;    и ожидаем её загрузки
WinWait %WinTitle%, С&лово или фраза в файле:
;    Заполняем поле запроса
ControlSetText Edit3, %SearchQuery%
Sleep 1000 ; Здесь нужна задержка - как сделать точнее?!
;    Нажимаем кнопку "Найти"
ControlClick На&йти
;    По доступности кнопок "Найти" и "Остановить" ожидаем завершения поиска:
Loop {
    ControlGet Enabled, Enabled,, На&йти
    if (!Enabled)
        break
    Sleep 1
}
Loop {
    ControlGet Enabled, Enabled,, Остановит&ь
    if (!Enabled)
        break
    Sleep 100
}

; Обрабатываем результаты поиска
ShellFolderItems := ExplorerWindow.Document.Folder.Items
Count := ShellFolderItems.Count
MsgBox Найдено %Count% файлов/папок
Loop %Count% {
    ShellFolderItem := ShellFolderItems.Item(A_Index - 1)
    MsgBox % ShellFolderItem.Path
}

; Закрываем окно Проводника (если оно невидимо, то это не обязательно)
ExplorerWindow.Quit()

5

Re: CMD/BAT: Батник поиска

Я уже нашел решение спасибо!

6

Re: CMD/BAT: Батник поиска

texnar
Ссылкой не поделитесь?