Frage

Ich interessiere mich für Dateisuche nach benutzerdefinierten Eigenschaften. Zum Beispiel möchte ich alle JPEG-Images mit bestimmten Dimensionen finden. Etwas sieht aus

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

Ich vermute, es geht darum, das System zu verwenden. Wie kann es gemacht werden? Danke im Voraus

War es hilfreich?

Lösung

Das ist eigentlich ziemlich einfach und Ihr Bauchgefühl über das System.Drawing war tatsächlich richtig:

Add-Type -Assembly System.Drawing

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

Speichern Sie das als Get-Image.ps1 Irgendwo in deinem Weg und dann kannst du es benutzen.

Eine andere Option wäre, Folgendes zu Ihrem hinzuzufügen $profile:

Add-Type -Assembly System.Drawing

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

Was so ziemlich gleich funktioniert. Fügen Sie natürlich ausgefallene Dinge wie Dokumentation oder so hinzu, wie Sie es für richtig halten.

Sie können dann verwenden es ist so:

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

Beachten Sie, dass Sie die auf diese Weise erstellten Objekte entsorgen sollten, nachdem Sie sie verwendet haben.

Natürlich können Sie einen Brauch hinzufügen Dimension Eigenschaft, damit Sie dafür filtern können:

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

Andere Tipps

Hier ist eine alternative Implementierung als (fast) Einzeiler:

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 }

Wenn Sie diesen Befehl mehr als einmal ausführen müssen, würde ich empfehlen, Johannes 'vollständigere Lösung stattdessen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top