我使用的是PowerShell 2.0,我想输出某个路径的所有子目录。下面的命令输出所有文件和目录,但我不知道如何过滤掉这些文件。

Get-ChildItem c:\mypath -Recurse

我尝试使用$_。属性来获取属性,但我不知道如何构造System.IO.FileAttributes的字面实例来进行比较。在cmd.exe中就是这样

dir /b /ad /s

当前回答

Use:

dir -r | where { $_ -is [System.IO.DirectoryInfo] }

其他回答

具体回答原始问题(使用IO.FileAttributes):

Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -band [IO.FileAttributes]::Directory}

但我更喜欢Marek的解决方案:

Where-Object { $_ -is [System.IO.DirectoryInfo] }

PowerShell v2及更新版本(k表示您开始搜索的文件夹):

Get-ChildItem $Path -attributes D -Recurse

如果你只需要文件夹名,不需要其他任何东西,使用这个:

Get-ChildItem $Path -Name -attributes D -Recurse

如果您正在寻找特定的文件夹,您可以使用以下命令。在这种情况下,我正在寻找一个名为myFolder的文件夹:

Get-ChildItem $Path -attributes D -Recurse -include "myFolder"

对于PowerShell 3.0及更高版本:

Get-ChildItem -Directory

您还可以使用别名dir、ls和gci


对于低于3.0的PowerShell版本:

Get-ChildItem返回的FileInfo对象有一个“base”属性piscontainer。您只需要选择这些项。

Get-ChildItem -Recurse | ?{ $_.PSIsContainer }

如果您想要目录的原始字符串名称,您可以这样做

Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName

这种方法需要更少的文本:

ls -r | ? {$_.mode -match "d"}

Use:

dir -Directory -Recurse | Select FullName

这将为您提供根结构的输出,其中仅包含目录的文件夹名称。