我能够使用Get-ChildItem -Recurse来递归搜索目录以找到特定目录,但是我只对目录是另一个特定目录的子目录感兴趣。父级/子级可以在目录树中的任意深度存在。例如:
C:\ lev1 \ lev2 \ lev3 \ lev4 \ parentDir \ childDirToFind \ lev7 ...
以下代码返回所有出现的childDirToFind:
Get-ChildItem -Path C:\\*\\*\ChildDirToFind -Recurse
我尝试在-Path选项中包含parentDir,但没有结果;例如:
Get-ChildItem -Path C:\\*\\*\parentDir\childDirToFind -Recurse
我也尝试使用-Filter选项,但没有结果。也许Get-ChildItem不是最好的方法?理想情况下,我希望Get-ChildItem在找到目录后立即返回,而不是继续搜索整个树。
答案 0 :(得分:0)
下面是一个示例,其中父级为drivers
,子级为etc
Get-ChildItem C:\Windows -Recurse -Directory -ErrorAction SilentlyContinue | ? { $_.FullName -like '*\drivers\etc' }
我添加了-ErrorAction
参数以隐藏所有无法访问的文件夹错误。
答案 1 :(得分:0)
感谢Rich Moss和LotPings为我指引了正确的方向。两种解决方案都提供了正确的结果,尽管将输出管道输送到“ select -first 1”确实具有增加的好处,即一旦找到结果就停止目录搜索。我不确定为什么,但是使用-filter并比较$ .Parent.Name的速度是比较$ .FullName的速度的两倍(使用Measure-Command进行检查)。我最终同意了:
cgi C:\ -dir -rec -ea SilentlyContinue -filter childDirectory | ? {$ _。Parent.Name -eq'parentDir'} |选择-first 1