以下是示例脚本:
gci -path c:\ -re -force -ou folders | ? {$_.Attributes -eq "Directory"}
此命令的输出用于不同目的。
如何从$folders
变量中过滤特定目录中的所有文件夹?例如c:\specificdirectory\*
答案 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"}
现在你有两个变量:
$dataForLater
包含所有文件夹...和$specializedData
这是$dataForLater
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"}