Обсуждение:Выборка файлов (макросы) по контексту с помощью PowerShell

0 (0)
  • Развернуть Обсуждение:Выборка файлов (макросы) по контексту с помощью PowerShell ( Обсуждение примера  02.11.2010 18:03 )
    0(0)
    Конкретная задача - выбрать все макросы, в которых остались неизменными пути к серверу. Или другими словами - выбрать файлы с UNC путями в тексте к старым серверам. И сохранить результат поиска в файле.
    Из стандартных решений сразу пришло в голову ФАР и скрипт на WSH. Перебор по каталогам, открытие файлов, перебор строк, определение - входит контекст или нет. Стандартно и неинтересно.
    У Майкрософта появился новый встроенный в ОС язык - PowerShell. На нем такого рода задачи решаются просто и элегантно.
    Вот как выглядит решение данной задачи:
    Get-ChildItem "P:\RSBank5.test" -r | where-object {$_.Extension -eq ".mac"} | select-string "\\\\\\\\[^{\\\\\\\\CurrentNameServer}{""\\\\\\\\""}]" | format-Table Path,LineNumber,Line >result.txt

    Одной строкой решается с виду простая задача, но..
    Разберем, как говорится, по слогам текст команды.
    Get-ChildItem "P:\RSBank5.test" -r означает Взять Всех Потомков в каталоге P:\RSBank5.test рекурсивно(-r). Далее следует символ |. Это означает передать результат выполнения предыдущей команды (в виде набора айтемов, т.е. файлов) на вход следующей команды.
    where-object {$_.Extension -eq ".mac"} - это фильтр по расширению, здесь все прозрачно
    select-string "\\\\\\\\[^{\\\\\\\\CurrentNameServer}{""\\\\\\\\""}]" - здесь посложнее. Текст команды значит - ВыделитьСтроки которые удовлетворяют условию шаблона РегулярногоВыражения, представленного строкой в кавычках. Текст РегулярногоВыражения - положительный результат сравнения даст строка в которой есть вхождение 4-х обратных слэшей, за исключением подстрок - \\\\CurrentNameServer и "\\\\" - это 4 слэша в кавычках.
    format-Table Path,LineNumber,Line > result.txt Результат работы Командлета форматировать в виде таблицы с колонками имя файла с полным путем к нему, номер строки в которой положительный результат сравнения, и сама строка и вывести этот поток в файл result.txt

    Посмотреть пример
    >> Ответить