如何使用Powershell筛选仅包含文件的文件夹并输出对应路径
PowerShell 实现查询所有含文件的目录
需求背景
给定如下目录结构,需要返回所有包含至少一个文件的目录,路径使用正斜杠分隔:
root ├───A │ ├───1 │ │ a.txt │ │ b.txt │ │ │ ├───2 │ │ a.txt │ │ │ └───3 ├───B │ ├───1 │ │ a.txt │ │ b.txt │ │ │ └───3 └───C ├───1 └───2
预期输出:
root/A/1 root/A/2 root/B/1
最佳实现方案
高效版(推荐)
使用EnumerateFiles检测文件存在,无需遍历目录下所有文件,性能最优:
Get-ChildItem -Directory -Recurse root | Where-Object { $_.EnumerateFiles().Any() } | ForEach-Object { $_.FullName -replace '\\', '/' }
简洁版
逻辑直观,适合文件量小的场景:
Get-ChildItem -Directory -Recurse root | Where-Object { $_.GetFiles().Count -gt 0 } | ForEach-Object { $_.FullName.Replace('\', '/') }
命令说明
Get-ChildItem -Directory -Recurse root:递归遍历root目录下的所有子目录,仅返回目录类型对象Where-Object筛选逻辑:判断当前目录下是否存在文件,过滤空目录- 路径替换逻辑:将Windows默认的反斜杠路径分隔符替换为正斜杠,匹配预期输出格式
内容的提问来源于stack exchange,提问作者user32882
相关产品推荐
相关产品推荐

