在PathOne中获取PathTwo计数

问题描述:

我需要在PathOne目录下找到PathOne中的所有PathTwos;目前我可以得到所有的PathOne的使用:在PathOne中获取PathTwo计数

$path = Get-ChildItem "C:\Path\" | ?{ $_.PSIsContainer } 

由于PathOne是动态的(它的名字可能是任何东西),这可以帮助我通过所有可能的路径循环。现在,PathOne可能有2个或更多文件夹,如PathTwo1,PathTwo2和PathTwo3。我需要知道动态PathOne中有多少个文件夹。最初我以为我可以在PathOne内循环,获取动态路径的名称,然后通过PathOne循环,计算所有PathTwos并返回超过1的所有内容;不幸的是,这并没有回报我所需要的。

我已经试过:

  • 一个循环内的循环:造成混乱和不返回正确的结果。
  • 使用C:\Path\.\通过跳转到下一个文件夹将获得PathOne内的文件夹的计数。

根据意见,例如:

C:\Path\PathOne1\PathTwo1 
C:\Path\PathOne1\PathTwo2 
C:\Path\PathOne2\PathTwo1 
C:\Path\PathOne2\PathTwo2 
C:\Path\PathOne2\PathTwo3 
C:\Path\PathOne3\PathTwo1 # don't want because only one PathTwo 

我不在乎有多少PathOnes也有,但我确实需要每一个有一个以上的PathTwos PathOne。

+0

您正在寻找在任意层级的文件夹?或者只是父路径的直接子节点? “PathTwo”只是一个(部分)文件夹名称,或者它可以是部分路径(如'foo \ bar')? –

+0

我想我明白了......但是如果你需要展示一个简单的目录结构和你期望得到的结果,它可能会有所帮助。如果您显示您当前的计数逻辑,也可以提供帮助。 – Matt

+0

@PetSerAl谢谢;你用一块石头杀死了两只鸟,我只是想弄清楚如何跳路,但这也算得上。再次感谢。我会将其标记为答案。 – DoubleVu

您可以通过这个命令得到期望的结果:

# Get all items on two level deep. 
Get-Item C:\Path\*\* | 
# Get only directories. 
Where-Object PSIsContainer | 
# Group them by parent. 
Group-Object {$_.Parent.FullName} -NoElement | 
# Choose groups with Count more then one. 
Where-Object Count -gt 1 | 
# Select name of parent directory 
Select-Object -ExpandProperty Name