мають лише файли повернення Powershell get-childitem


76

Я хотів би використовувати get-childitem рекурсивно, але тільки він повертає файли, а не каталоги. Найкраще рішення у мене просто не здається природним:

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

Відповіді:


76

Спробуйте це:

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

4
якщо ви виключаєте контейнери, ви можете залишити *. *, правда?
MDMoore313

99

У Powershell 3.0 простіше,

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

Це ще коротше,

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

2

У PowerShell 3.0 ви також можете використовувати нещодавно доданий -Attributesпараметр
(разом з логічними операторами)

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

Гольф

dir -r -Attributes !D

-4

У powershell 2.0 найкращим і найпростішим рішенням, який я придумав, є включення всіх файлів з розширенням:

get-childitem -Recurse -include *.*

папки не мають розширення, тому вони виключаються, остерігайтеся файлів, не названих розширенням.


10
Це (про каталоги) не відповідає дійсності. Ніщо не може перешкодити вам мати каталог з розширенням
Ромео Нінов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.