如何使用PowerShell查找包含指定隐藏子文件夹的文件夹
PowerShell 查找包含指定隐藏子文件夹的父目录实现方案
直接定位目标.blah文件夹再取父目录是性能最优的写法,不需要先全量遍历所有目录再做过滤:
# 将路径替换为实际需要扫描的盘符/根目录,例如 D:\ 、 C:\Program Files $scanRoot = "[待检测盘符]" # 批量获取所有符合要求的父目录路径 $resultDirs = Get-ChildItem -Path $scanRoot -Recurse -Directory -Force -Filter ".blah" -ErrorAction SilentlyContinue | Split-Path -Parent | Get-Unique
关键逻辑说明
- 给
Get-ChildItem追加-Filter ".blah"参数,会让文件系统层面直接筛选目标名称的目录,比遍历完成后在PowerShell进程内做过滤性能高很多,扫描大容量盘符时速度差距非常明显 Split-Path -Parent直接提取.blah文件夹所属的父目录全路径Get-Unique用于去重,避免特殊场景下返回重复路径
如果后续要对这些匹配到的目录做升级操作,直接遍历结果集即可:
foreach ($targetDir in $resultDirs) { # 在此处写入目录结构升级、新版本程序部署的相关逻辑 Write-Host "正在处理目标目录: $targetDir" }
如果需要严格匹配「目录下直属包含.blah隐藏子文件夹」的规则(包括多层嵌套场景下的中间层目录),可以用Test-Path做精准校验的写法,逻辑更严谨:
$resultDirs = Get-ChildItem -Path $scanRoot -Recurse -Directory -Force -ErrorAction SilentlyContinue | Where-Object { Test-Path -Path (Join-Path $_.FullName ".blah") -PathType Container -Force } | Select-Object -ExpandProperty FullName
注意:该写法需要遍历所有目录后逐次校验子项,扫描全盘符的耗时会比第一种写法更长,适合对匹配精度要求高的场景使用。
内容的提问来源于stack exchange,提问作者mellinka
相关产品推荐
相关产品推荐

