过滤特定目录中的文件夹

Filter folders in specific directory

这是示例脚本:

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

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

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

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

所以您正在尝试使用现有数据 运行 另一个 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")}