Quiero hacer una función dinámica que busque el $ ErrorCode solicitado dentro de los archivos ingresados ​​y eventualmente copie los archivos con el error a otra carpeta.

En este momento, mi código toma solo un archivo y devuelve la oración de donde se encontró $ Error_Code. Quiero buscar en varios archivos y devolver el nombre del archivo que tiene $ 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
Jess Torres 29 oct. 2019 a las 00:39

1 respuesta

La mejor respuesta
  • Objetos de salida de Select-String, que son del tipo [Microsoft.PowerShell.Commands.MatchInfo]: tiene una propiedad .Path que refleja la ruta del archivo de entrada.

  • Agregar el interruptor -List a Select-String hace que deje de buscar después de la primera coincidencia en el archivo, por lo que obtendrá exactamente 1 objeto de salida por cada archivo en el que se encontró al menos 1 coincidencia.

Por lo tanto, lo siguiente genera solo las rutas de los archivos de entrada en los que se encontró al menos 1 coincidencia:

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

Nota: -Pattern admite una matriz de patrones de expresiones regulares, por lo que si define su parámetro $ErrorCode como [string[]], los archivos que tienen cualquiera de los patrones coincidirán; use -SimpleMatch en lugar de -Pattern para buscar por subcadenas literales en su lugar.


Re:

eventualmente copie los archivos con el error a otra carpeta

Simplemente agregando | Copy-Item -Destination $DestPath al comando anterior debería ser suficiente.

Re:

Quiero buscar en varios archivos

Dependiendo de sus necesidades, puede hacer que sus $SourcePath y $SourceFile parámetros matriz valoren ([string[]]) y / o pasen expresiones comodín como argumentos.

0
mklement0 11 nov. 2019 a las 21:15