Касательно параметров не требуются, чтобы быть установленным в функции, тогда как параметры должны быть связаны со значением прежде, чем выйти из функции. Переменные передали, как может также быть передан функции без того, чтобы быть инициализированным.
Вы можете использовать свойство PSIsContainer
:
gci | ? { !$_.PSIsContainer }
Your подход также будет работать, но должен выглядеть так:
gci | ? { !($_.Attributes -band [IO.FileAttributes]::Directory) }
поскольку атрибуты являются перечислением и битовой маской.
Или, для вашего другого подхода:
gci | ? { "$($_.Attributes)" -notmatch "Directory" }
Это приведет к преобразованию атрибутов в строка (которая может выглядеть как "Directory, ReparsePoint"),а в строке вы можете использовать оператор -notmatch
.
PowerShell v3 наконец-то имеет параметр -Directory
в Get-ChildItem
:
Get-ChildItem -Directory
gci -ad
You can also filter out directories by looking at their type directly:
ls | ?{$_.GetType() -ne [System.IO.DirectoryInfo]}
Directories are returned by get-childitem (or ls or dir) of type System.IO.DirectoryInfo, and files are of type System.IO.FileInfo. When using the types as literals in Powershell you need to put them in brackets.