Lassen Sie nur Powershell get-childitem-Dateien zurückgeben


76

Ich möchte get-childitem rekursiv verwenden, aber nur Dateien und keine Verzeichnisse zurückgeben. Die beste Lösung, die ich habe, scheint einfach nicht selbstverständlich zu sein:

gci . *.* -rec | where { $_.GetType().Name -eq "FileInfo" }

Antworten:


76

Versuche dies:

gci . *.* -rec | where { ! $_.PSIsContainer }

4
Wenn Sie Container ausschließen, können Sie das * weglassen. *, richtig?
MDMoore313

100

In Powershell 3.0 ist es einfacher,

gci -Directory #List only directories
gci -File #List only files

Das ist noch kürzer,

gci -ad # alias for -Directory
gci -af # alias for -File

2

In PowerShell 3.0 können Sie auch den neu hinzugefügten -AttributesParameter
(zusammen mit logischen Operatoren) verwenden.

Get-ChildItem -Recurse -Attributes !Directory+!System

Golf gespielt

dir -r -Attributes !D

-4

In Powershell 2.0 bestand die beste und einfachste Lösung darin, alle Dateien mit einer Erweiterung einzuschließen:

get-childitem -Recurse -include *.*

Ordner haben keine Dateierweiterung, daher werden sie ausgeschlossen. Achten Sie auf keine Dateierweiterung mit dem Namen "files".


10
Dies (über Verzeichnisse) ist nicht wahr. Nichts kann Sie daran hindern, ein Verzeichnis mit einer Erweiterung zu haben
Romeo Ninov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.