Powershell 仅返回第二级目录名
我想检索磁盘的所有(且仅限于)二级目录名。例如,Powershell 仅返回第二级目录名,powershell,directory,powershell-4.0,Powershell,Directory,Powershell 4.0,我想检索磁盘的所有(且仅限于)二级目录名。例如,C:\folder1\folder2和C:\folder1\folder3,我只需要检索folder2和folder3 我写了这个,PS显示所有目录名: Get-ChildItem -Recurse | ?{ $_.PSIsContainer} | Select-Object Name 我发现了这一点,并以这种方式修改了前面的命令: Get-ChildItem -Recurse | `Where-Object {($_.directory -
C:\folder1\folder2
和C:\folder1\folder3
,我只需要检索folder2
和folder3
我写了这个,PS显示所有目录名:
Get-ChildItem -Recurse | ?{ $_.PSIsContainer} | Select-Object Name
我发现了这一点,并以这种方式修改了前面的命令:
Get-ChildItem -Recurse | `Where-Object {($_.directory -match '^*\\\S*$')} ` | ForEach-Object {?{ $_.PSIsContainer} | Select-Object Name }
但当我使用它时,PS不会显示任何内容
我不明白为什么,有人能帮我吗?谢谢大家! 您应该能够使用一些有趣的通配符来获取您想要的内容
Get-ChildItem \*\*\ | Where-Object{$_.PSIsContainer}
或者,如果您至少有PowerShell 3.0,这将更快
Get-ChildItem \*\*\ -Directory
然后,如果您只需要添加在
|上的名称,请选择Object-ExpandProperty Name
,您应该能够使用一些有趣的通配符来获得您想要的内容
Get-ChildItem \*\*\ | Where-Object{$_.PSIsContainer}
或者,如果您至少有PowerShell 3.0,这将更快
Get-ChildItem \*\*\ -Directory
然后,如果您只需要添加在
| Select Object-ExpandProperty Name
上的名称,则只有文件似乎具有.directory
属性,而目录则没有,因此您将永远无法获得通过(.directory
匹配模式)过滤器并同时通过(PSIsContainer
)过滤器的内容
除了您的PSIsContainer
过滤器不工作之外:
| ForEach-Object {?{ $_.PSIsContainer} | Select-Object Name }
这没有道理;您只能使用?
和cmdlet |过滤管道?{}
,您无法在没有输入的情况下在循环scriptblock的开头进行筛选并获得任何有用的内容。这是在循环中反复运行对象{},并且没有输出
使用-Recurse会非常慢,因为您会一直进入每个目录,并为所有文件创建[fileinfo]对象
除了Matt的通配符答案之外,假设PS v3或更高版本,您可以列出根目录中的所有目录,然后列出这些目录中的所有目录,然后停在那里:
Get-ChildItem c:\ -Directory | Get-ChildItem -Directory | Select -ExpandProperty Name
or
gci c:\ -Dir | ForEach { (gci $_ -Dir).Name }
只有文件似乎具有
.directory
属性,而目录则没有,因此您将永远无法获得通过(.directory
匹配模式)过滤器并同时通过(PSIsContainer
)过滤器的内容
除了您的PSIsContainer
过滤器不工作之外:
| ForEach-Object {?{ $_.PSIsContainer} | Select-Object Name }
这没有道理;您只能使用?
和cmdlet |过滤管道?{}
,您无法在没有输入的情况下在循环scriptblock的开头进行筛选并获得任何有用的内容。这是在循环中反复运行对象{},并且没有输出
使用-Recurse会非常慢,因为您会一直进入每个目录,并为所有文件创建[fileinfo]对象
除了Matt的通配符答案之外,假设PS v3或更高版本,您可以列出根目录中的所有目录,然后列出这些目录中的所有目录,然后停在那里:
Get-ChildItem c:\ -Directory | Get-ChildItem -Directory | Select -ExpandProperty Name
or
gci c:\ -Dir | ForEach { (gci $_ -Dir).Name }
你好我试过使用
-Directory
,效果很好。谢谢你的帮助!实际上,我还尝试在-Directory
语句之后使用ForEach Object{{{$$.PSIsContainer}选择Object Name
,效果很好。显然Select Name
更好。但是…只是让你知道。谢谢!@Hari它有效吗?我尝试gci{$.PSIsContainer}
没有输出-没有文件,没有文件夹。$\u
没有值…?我尝试了这个命令:Get ChildItem C:\*\*-Directory |?{$\.PSIsContainer}|选择-ExpandProperty Name
,它给了我与您相同的输出:获取ChildItem c:\-目录|获取ChildItem-目录|选择-ExpandProperty Name
。所以…是的,它工作正常。您好!我尝试了-目录
,它工作正常。感谢您的帮助!实际上,我还尝试了使用每个对象{code>?{$$.PSIsContainer}在-Directory
语句之后选择对象名,它就可以工作了。显然选择名称
更好。但是…只是让你知道。谢谢!@Hari它可以工作吗?我尝试gci | foreach{$.pscontainer}
没有输出-没有文件,没有文件夹。$\u
没有值…?我尝试了这个命令:Get ChildItem C:\*\*-Directory |?{$\.PSIsContainer}|选择-ExpandProperty Name
,它将为我提供与您相同的输出:获取ChildItem c:\-目录|获取ChildItem-目录|选择-ExpandProperty Name
。因此……是的,它可以工作。