我使用的是PowerShell 2.0,我想输出某个路径的所有子目录。下面的命令输出所有文件和目录,但我不知道如何过滤掉这些文件。
Get-ChildItem c:\mypath -Recurse
我尝试使用$_。属性来获取属性,但我不知道如何构造System.IO.FileAttributes的字面实例来进行比较。在cmd.exe中就是这样
dir /b /ad /s
我使用的是PowerShell 2.0,我想输出某个路径的所有子目录。下面的命令输出所有文件和目录,但我不知道如何过滤掉这些文件。
Get-ChildItem c:\mypath -Recurse
我尝试使用$_。属性来获取属性,但我不知道如何构造System.IO.FileAttributes的字面实例来进行比较。在cmd.exe中就是这样
dir /b /ad /s
当前回答
我的解决方案是基于TechNet文章Get-ChildItem Cmdlet可以做的有趣的事情。
Get-ChildItem C:\foo | Where-Object {$_.mode -match "d"}
我在我的剧本中使用了它,效果很好。
其他回答
对于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
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"
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
Use:
dir -r | where { $_ -is [System.IO.DirectoryInfo] }
公认的答案提到
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
获取一个“原始字符串”。 但实际上select。system。io。directoryinfo类型的对象会被返回。对于原始字符串,可以使用以下方法:
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | % { $_.FullName }
如果该值连接到一个字符串,则区别很重要:
foo\@{FullName=bar} foreach操作符为预期的:foo\bar