Get-ChildItem到特定级别的文件夹

时间:2014-11-01 17:55:55

标签: powershell

所以我有一个类似于下面的文件夹结构:

\\server\drive\code\serverName

如果我在Get-ChildItem上运行\\server\drive,它将返回:

\\server\drive\code\
\\server\drive\code\serverName

(还有更多结果,这只是一个例子)

我只关心:

\\server\drive\code\serverName

所以我留下了在该驱动器上使用存储的服务器列表 - 因为我将使用它来计算每个服务器使用多少存储空间。

如何使用GCI获取\\server\drive\code\serverName个文件夹并忽略父文件夹\\server\drive\code\

2 个答案:

答案 0 :(得分:1)

我和伯爵有类似的结论。我的解决方案略有不同。

$basePath = "c:\temp"
$baseLevels = $basePath.Split("\").Count - 1
$levelsDeep = 2
Get-ChildItem -Recurse -Directory -Path $basePath | Where-Object{(($_.FullName).Split("\").Count - $baseLevels - 1) -eq $levelsDeep} 

变量$basePath$baseLevels$levelsDeep使这更加动态。取$basePath并计算它的级别,以便我们的计算基于$levelsDeep的{​​{1}}。因此,这将返回$basePath

以内2级别的所有目录

两个计算中的C:\temp是一种忽略驱动器的方法,在我的例子中是C:\,因为它不是"文件夹"

答案 1 :(得分:0)

我对任何感兴趣的人都提出了以下解决方案。我能想到的唯一简单方法是计算" \"通过正则表达式包含在每一行中。

ForEach($var in $path.FullName){    
    If(([regex]::matches($($var),"\\").count) -eq 4){ 
        #Ignored as this is first parent level folder         
    }else{
        $var >> C:\Paths.txt
    }
}