Domanda

Sono interessato a file Ricerca per le proprietà personalizzate. Per esempio, io voglio trovare tutte le immagini JPEG con certe dimensioni. Sembra qualcosa di simile

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

ho il sospetto che sia sull'utilizzo di System.Drawing. Come si può fare? Grazie in anticipo

È stato utile?

Soluzione

Che in realtà è abbastanza facile da fare e il vostro istinto su System.Drawing è stato infatti corretto:

Add-Type -Assembly System.Drawing

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

Salva che, come Get-Image.ps1 qualche parte nel vostro percorso e quindi si può utilizzare.

Un'altra opzione sarebbe quella di aggiungere la seguente al vostro $profile:

Add-Type -Assembly System.Drawing

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

che funziona più o meno lo stesso. Naturalmente, aggiungere cose di fantasia come la documentazione o così come si vede in forma.

Si può quindi utilizzo in questo modo:

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

Si noti che è necessario disporre gli oggetti creati in questo modo dopo il loro utilizzo.

Naturalmente, è possibile aggiungere una proprietà personalizzata Dimension così si potrebbe filtrare per questo:

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

Altri suggerimenti

Ecco un'implementazione alternativa come (quasi) one-liner:

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 }

Se avete intenzione di necessità di eseguire questo comando più di una volta, mi sento di raccomandare soluzione più completa Johannes' .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top