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

Get-ChildItem c:\mypath -Recurse

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

dir /b /ad /s

当前回答

您可以尝试PsIsContainer对象

Get-ChildItem -path C:\mypath -Recurse | where {$_.PsIsContainer -eq $true} 

其他回答

Use:

Get-ChildItem \\myserver\myshare\myshare\ -Directory | Select-Object -Property name |  convertto-csv -NoTypeInformation  | Out-File c:\temp\mydirectorylist.csv

它执行以下操作

获取目标位置的目录列表: 获取\\myserver\myshare\myshare\ -目录 只提取目录的名称: 选择-对象-属性名 将输出转换为CSV格式: convertto-csv -NoTypeInformation 将结果保存到一个文件: Out-File c: \ temp \ mydirectorylist.csv

在PowerShell 3.0中,它更简单:

Get-ChildItem -Directory #List only directories
Get-ChildItem -File #List only files

首先需要使用get - childitem递归地获取所有文件夹和文件。然后将输出管道到只接收文件的Where-Object子句中。

# one of several ways to identify a file is using GetType() which
# will return "FileInfo" or "DirectoryInfo"
$files = Get-ChildItem E:\ -Recurse | Where-Object {$_.GetType().Name -eq "FileInfo"} ;

foreach ($file in $files) {
  echo $file.FullName ;
}

对于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

用这个吧:

Get-ChildItem -Path \\server\share\folder\ -Recurse -Force | where {$_.Attributes -like '*Directory*'} | Export-Csv -Path C:\Temp\Export.csv -Encoding "Unicode" -Delimiter ";"