Как искать контент в файлах в Powershell - PullRequest
1 голос
/ 29 октября 2019

Я хочу создать динамическую функцию, которая ищет запрошенный $ ErrorCode во введенных файлах и в конечном итоге копирует файлы с ошибкой в ​​другую папку.

Прямо сейчас мой код берет только один файл и возвращает предложение о том, где был найден $ Error_Code. Я хочу выполнить поиск по нескольким файлам и вернуть имя файла с $ ErrorCode.

function SearchError{

    Param (
        [Parameter (Mandatory=$true)] [STRING] $SourcePath,
        [Parameter (Mandatory=$true)] [STRING] $SourceFile,
        [Parameter (Mandatory=$true)] [STRING] $ErrorCode,
        [Parameter (Mandatory=$true)] [STRING] $FileType
       # [Parameter (Mandatory=$true)] [STRING] $DestPath


        )  
    $TargetPath = "$($SourcePath)\$($SourceFile)"
    #Return $TargetPath

    $DestinationPath = "$($DestPath)"
    #Return $DestinationPath 


    #foreach($error in $TargetPath) {

    Get-ChildItem $TargetPath | Select-String -pattern $ErrorCode 

}
SearchError 

1 Ответ

0 голосов
/ 29 октября 2019
Выходные объекты
  • Select-String - типа [Microsoft.PowerShell.Commands.MatchInfo] - имеют свойство .Path, которое отражает путь к входному файлу.

  • Добавление переключателя -List к Select-String останавливает поиск после первого совпадения в файле, поэтому вы получите ровно 1 выходной объект для каждого файла, в котором было найдено хотя бы 1 совпадение.

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

Get-ChildItem $TargetPath |
  Select-String -List -Pattern $ErrorCode | ForEach-Object Path

Примечание: -Pattern поддерживает массив шаблонов регулярных выражений, поэтому, если вы определите свой параметр $ErrorCode как [string[]], файлы с любым из шаблонов будут совпадать;используйте -SimpleMatch вместо -Pattern для поиска по буквенным подстрокам вместо.


Re:

в конечном итоге скопируйте файлы с ошибкой вдругая папка

Просто добавьте | Copy-Item -Destination $DestPath к вышеприведенной команде.

Re:

Я хочу найти несколько файлов

В зависимости от ваших потребностей вы можете сделать $SourcePath и $SourceFile параметры массив -значным ([string[]]) и / или передать подстановочные выражения какаргументы.

...