Администратором сети в своё время была заложена программа, которая собирает информацию о компьютере и складывает это в папке файл-сервера. Программа, а точнее запись в реестре, указывающая откуда запускать файл при загрузке системы (CheckCfg) установлена на всех компьютерах сети, что много облегчало дальнейшую работу. Но файл содержит огромное количество информации, полный слепок системы. А нужно-то было всего получить информацию о процессоре, памяти и дисковом пространстве.
Эти параметры в файле конфиге называются:
Current_User_Name=Первый параметр был добавлен для идентификации машины, т.к. файл, который требовалось дополнить имел лишь информацию о пользователе. В виду того, что файлов довольно много мы решили поделить это всё количество поровну. Мне досталось порядка 100 файлов конфигурации. Сами же файлы имеют имена, соответствующие имени компьютера.
CPU=
Memory_in_Mb=
Total_HDD_in_Mb=
В общем, скопировал свою часть файлов и стал думать, как же мне выйти из ситуации. Искать программы для парсинга файлов было влом, а вручную открывать каждый файл, искать в нём информацию и копировать в документ было ещё менее привлекательно. Выход был найден с помощью головы и Google. Со времён DOS'а помнил команду FIND. Поиск же подсказал, что существует аналог, называемые Findstr. Это-то мне и нужно.
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл] [/C:строка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]] строки [[диск:][путь]имя_файла[ ...]]За полной документацией обращаться не пришлось, и этого хватило.
/B Искать образец только в началах строк.
/E Искать образец только в конце строк.
/L Поиск строк дословно.
/R Поиск строк как регулярных выражений.
/S Поиск файлов в текущей папке и всех ее подпапках.
/I Определяет, что поиск будет вестись без учета регистра.
/X Печатает строки, которые совпадают точно.
/V Печатает строки, не содержащие совпадений с искомыми.
/N Печатает номер строки, в которой найдено совпадение, и ее содержимое.
/M Печатает только имя файла, в которой найдено совпадение.
/O Печатает найденный строки через пустую строку.
/P Пропускает строки, содержащие непечатаемые символы.
/OFF[LINE] Не пропускает файлы с установленным атрибутом "Автономный".
/A:цвета Две шестнадцатеричные цифры - атрибуты цвета. См. "COLOR /?"
/F:файл Читает список файлов из заданного файла (/ для консоли).
/C:строка Использует заданную строку как искомую фразу поиска.
/G:файл Получение строк из заданного файла (/ для консоли).
/D:список_папок Поиск в списке папок (разделяются точкой с запятой).
строка Искомый текст.
[диск:][путь]имя_файла
Задает имя файла или файлов.
Использовать пробелы для разделения нескольких искомых строк, если аргумент не имеет префикса /C. Например, 'FINDSTR "Привет мир" a.b' ищет "Привет" или "мир" в файле a.b, а команда 'FINDSTR /C:"Привет мир" a.b' ищет строку "Привет мир" в файле a.b.
Краткая сводка по синтаксису регулярных выражений:
. Любой символ.
* Повтор: ноль или более вхождений предыдущего символа или класса
^ Позиция в строке: начало строки
$ Позиция в строке: конец строки
[класс] Класс символов: любой единичный символ из множества
[^класс] Обратный класс символов: любой единичный символ из дополнения
[x-y] Диапазон: любые символы из указанного диапазона
\x Служебный символ: символьное обозначение служебного символа x
\>xyz Позиция в слове: в начале слова
xyz\> Позиция в слове: в конце слова
За полной информацией о регулярных выражениях FINDSTR обратитесь к доступной интерактивной документации.
После быстрого прочтения данной справки была написана команда, помещённая в BAT-файл:
ren nch00*.* *.cfg #установка расширения файловИтак, что же мы делаем этим файлом. Все файлы конфигурации не имеют расширения. Чтобы их отделить от самого BAT-файла, текстового файла и файла вывода добавляю к ним расширение. Мне понравилось *.cfg, но можно любое другое. Ну а дальше, командой findstr выбираю из всех файлов с расширением *.cfg в данном каталоге и подкаталогах (параметр /s) все искомые строки из файла finddata.txt (параметр /g:findata.txt) без учёта регистра (параметр /i) и перенаправляю вывод в файл result.txt (параметр перенаправления потока вывода ">").
findstr /s /i /g:finddata.txt *.cfg > result.txt #сама процедура
Файл findata.txt имеет такую структуру:
Current_User_Name=Выходной файл получается вида:
CPU=
Memory_in_Mb=
Total_HDD_in_Mb=
NCH00W018.cfg:Current_User_Name=Фамилия.ИмяДанный вид меня вполне устраивал, лишь удалил часть строк до ":"
NCH00W018.cfg:CPU=2x Intel Pentium III 2590 MHz MMX Katmai (0.25 mkm)
NCH00W018.cfg:Memory_in_Mb=2013
NCH00W018.cfg:Total_HDD_in_Mb=305241
Комментариев нет:
Отправить комментарий
Уважаемый комментатор, пишите грамотно.
С благодарностью, автор блога.