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" }
Frank Schwieterman
quelle

Antworten:

76

Versuche dies:

gci . *.* -rec | where { ! $_.PSIsContainer }
Andy
quelle
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
iraSenthil
quelle
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
Nixda
quelle
-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".

David Gacías Lacruz
quelle
10
Dies (über Verzeichnisse) ist nicht wahr. Nichts kann Sie daran hindern, ein Verzeichnis mit einer Erweiterung zu haben
Romeo Ninov