Pregunta

Estoy interesado en la búsqueda de archivos por propiedades personalizadas. Por ejemplo, quiero encontrar todas las imágenes JPEG con ciertas dimensiones. Algo parece

Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | where-object { $_.Dimension -eq '1024x768' }

Sospecho que se trata de usar el sistema. ¿Cómo se puede hacer? Gracias por adelantado

¿Fue útil?

Solución

En realidad, eso es bastante fácil de hacer y su instinto sobre el sistema. La goteo era en realidad correcta:

Add-Type -Assembly System.Drawing

$input | ForEach-Object { [Drawing.Image]::FromFile($_) }

Guarda eso como Get-Image.ps1 En algún lugar de su camino y luego puede usarlo.

Otra opción sería agregar lo siguiente a su $profile:

Add-Type -Assembly System.Drawing

function Get-Image {
    $input | ForEach-Object { [Drawing.Image]::FromFile($_) }
}

que funciona más o menos igual. Por supuesto, agregue cosas elegantes como la documentación más o menos como mejor le parezca.

Entonces puedes usar es así:

gci -inc *.jpg -rec | Get-Image | ? { $_.Width -eq 1024 -and $_.Height -eq 768 }

Tenga en cuenta que debe deshacerse de los objetos creados de esta manera después de usarlos.

Por supuesto, puede agregar una personalización Dimension propiedad para que pueda filtrar para eso:

function Get-Image {
    $input |
        ForEach-Object { [Drawing.Image]::FromFile($_) } |
        ForEach-Object {
            $_ | Add-Member -PassThru NoteProperty Dimension ('{0}x{1}' -f $_.Width,$_.Height)
        }
}

Otros consejos

Aquí hay una implementación alternativa como una (casi) una sola:

Add-Type -Assembly System.Drawing

Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | ForEach-Object { [System.Drawing.Image]::FromFile($_.FullName) } | Where-Object { $_.Width -eq 1024 -and $_.Height -eq 768 }

Si va a necesitar ejecutar este comando más de una vez, recomendaría La solución más completa de Johannes en cambio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top