Jump to content

PowerShell - nach Datei typ suchen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,
ich habe folgendes Problem. Ich möchte gerne auf meiner NAS nach bestimmten Dateien via PowerShell suchen.
Mein Laufwerk Y:\ hat verschiedene Unterordner, ich möchte alle Unterordner nach bestimmten Datei typen .nef & .jpg durchsuchen dabei möchte ich aber nur Dateien ausgeben die größer sind als 100MB. Des Weiteren sollen zwei Ordner auf dem Y:\ Laufwerk von der Suche ausgeschlossen werden. Soweit funktioniert das auch, allerdings werden die zwei Ordner die ich ausschließen möchte nicht berücksichtigt. Kann mir jemand helfen?

In diesem beispiel hole ich mir erstmal mit alle unterordner mit "gci" anschließend werden diese in die variable "folders" gepackt. exclude funktioniert leider so nicht...

cd Y:\

$folders=gci
$exlude=@("folder1", "Folder2")
$files=@("*.nef","*.jpg")

Get-ChildItem -Path ($folders) -r -include ($files) (where-object {$_.length -gt 100mb -and ($_.FullName -notlike $exclude)}  |select length) | Sort-Object length | ft fullname, length -AutoSize
Link zu diesem Kommentar

Ich weiß, es klingt ein bissl "von hinten durch die Brust ins Auge", aber wenn es Dir nur ums Auflisten geht (Du hast ja schließlich ein "ft" am Ende, kannst Du dafür prima robocopy benutzen. Mit der Option /L werden die gefundenen Dateien nur aufgelistet - nicht kopiert. Mit der Option /XD schließt Du Verzeichnisse aus und mit /MIN beschränkst Du die Suche auf Dateien einer bestimmten Mindesgröße .... und schneller dürfte robocopy vermutlich auch noch sein.

robocopy Y:\ c:\temp *.jpg *.nef /L /S /XD Folder1 Folder2 /MIN 104857600 /FP

... also so sollte es eigentlich gehen ...  und es lässt sich auch noch erweitern wenn Du magst.  ;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar

Ich weiß, es klingt ein bissl "von hinten durch die Brust ins Auge", aber wenn es Dir nur ums Auflisten geht (Du hast ja schließlich ein "ft" am Ende, kannst Du dafür prima robocopy benutzen. Mit der Option /L werden die gefundenen Dateien nur aufgelistet - nicht kopiert. Mit der Option /XD schließt Du Verzeichnisse aus und mit /MIN beschränkst Du die Suche auf Dateien einer bestimmten Mindesgröße .... und schneller dürfte robocopy vermutlich auch noch sein.

robocopy Y:\ c:\temp *.jpg *.nef /L /S /XD Folder1 Folder2 /MIN 104857600 /FP

... also so sollte es eigentlich gehen ...  und es lässt sich auch noch erweitern wenn Du magst.  ;-)

okay, vielen Dank. Wollte PowerShell benutzen da ich mich sowieso mehr damit beschäftigen wollte ;).

 

Es geht mir nicht nur ums auflisten, ich will die liste evtl. ebenfalls ins Excel exportieren bzw. ein count einfügen zum zählen der Dateien.

Link zu diesem Kommentar

Dann kannst Du jetzt natürlich immernoch robocopy anweisen den Header und die Zusammenfassung wegzulassen, die Liste per Powershell einlesen und weiterparsen ....  :-D

 

Also so dann .... 

robocopy Y:\ c:\temp *.jpg *.nef /L /S /XD Folder1 Folder2 /MIN 104857600 /FP /NJH /NJS /NDL /XX
bearbeitet von BOfH_666
Link zu diesem Kommentar

Oooops ... ja lustig ... auf die Powershell-Zeile hatte ich gar nicht geachtet ....  so sollte es eigentlich funktionieren:

Get-ChildItem -Path Y:\* -Recurse -Include *.jpg, *.neg | Where-Object {$_.length -gt 100mb -and $_.Directory -notmatch 'folder1|folder2'} | Sort-Object -Property length | Format-Table fullname, length -AutoSize
Link zu diesem Kommentar

 

Oooops ... ja lustig ... auf die Powershell-Zeile hatte ich gar nicht geachtet ....  so sollte es eigentlich funktionieren:

Get-ChildItem -Path Y:\* -Recurse -Include *.jpg, *.neg | Where-Object {$_.length -gt 100mb -and $_.Directory -notmatch 'folder1|folder2'} | Sort-Object -Property length | Format-Table fullname, length -AutoSize

Super, das klappt... kann ich auch 'folder1|folder2' in eine variable packen?

 

Des Weiteren habe ich die Dateien mit "Measure-Object" gezählt. Der Wert Average wird in Bytes angezeitg, kann ich das ändern?

Meine Idee war den Wert Average in eine variable schreiben und diesen dann in MB/ GB berechnen. Wie bekomme ich die Ausgabe in eine Variable?

Get-ChildItem -Path ($folders) -recurse -include ($files) | where-object {$_.length -gt $size -and $_.Directory -notmatch 'Folder1'} | Measure-Object -Property length -Maximum -Minimum -Average -Sum

Grüße

bearbeitet von =o-n-e=
Link zu diesem Kommentar

Super, das klappt... kann ich auch 'folder1|folder2' in eine variable packen?

 

hmmmm ... wie könnte man sowas nur rausbekommen??    ... ich habe ne verrückte Idee - probier es doch einfach mal!    :p  ;)  :D

 

Des Weiteren habe ich die Dateien mit "Measure-Object" gezählt. Der Wert Average wird in Bytes angezeitg, kann ich das ändern?

 

Meine Idee war den Wert Average in eine variable schreiben und diesen dann in MB/ GB berechnen. Wie bekomme ich die Ausgabe in eine Variable?

 
Powershell nimmt Dir eine Menge Arbeit ab ... Du kannst einfach die Größe angeben, dann den Teiler angeben für die Einheit die Du haben willst und voilá - Powershell rechnet es für Dich um .... so hier z.B.
5242880 / 1MB

Du kannst in Variablen packen was auch immer Du gerne möchtest. Was willst Du denn eigentlich damit anfangen? Vielleicht gibt es ja eine ganz andere Lösung für Deine Aufgabe .... 

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...