过滤特定目录中的文件夹

时间:2015-01-11 20:35:29

标签: powershell

以下是示例脚本:

gci -path c:\ -re -force -ou folders | ? {$_.Attributes -eq "Directory"}

此命令的输出用于不同目的。 如何从$folders变量中过滤特定目录中的所有文件夹?例如c:\specificdirectory\*

2 个答案:

答案 0 :(得分:1)

所以你试图使用现有数据来运行另一个Get-ChildItem?这是有道理的,因为你已经将这些信息存储在一个变量中。因此,您尝试获取给定路径中的所有目录,在您的情况下为c:\。你可以用两种方法之一做到这一点。按优先顺序

# PowerShell 3.0 or later
$dataForLater = Get-ChildItem "c:\temp" -Recurse -Force -Directory
# PowerShell 2.0 or earlier
$dataForLater = Get-ChildItem "c:\temp" -Recurse -Force | Where-Object{$_.PSIsContainer}

我们捕获$dataForLater中的所有文件夹。那么您需要将此信息的子集用于其他目的吗?让我们使用一个小的正则表达式查询来缩小此数据集的范围,而不会影响原始

$regexPath = [regex]::Escape("C:\temp\somefolder")
$specializedData = $dataForLater | Where-Object{$_.FullName -match "^$regexPath"}

现在你有两个变量:

  1. $dataForLater包含所有文件夹...和
  2. $specializedData这是$dataForLater
  3. 的子集

    Vikas Gupta提供的更简单的答案是使用字符串方法。

    $specializedData = $dataForLater | Where-Object{$_.FullName.StartsWith("C:\temp\somefolder")}
    

答案 1 :(得分:0)

尝试以下操作 - 您要做的就是像这样过滤对象 -

$folders | Where-Object {$_.FullName.StartsWith("C:\SpecificFolder\", [System.StringComparison]::OrdinalIgnoreCase) -or $_.FullName -ieq "C:\SpecificFolder"}