如何在PowerShell 2.0中用Get-ChildItem递归列文件并排除文件夹
PowerShell 2.0 递归列出带路径的文件(不含文件夹)
方案1:高效过滤文件并提取相对路径
通过管道组合原生命令,先筛选文件对象,再从绝对路径中截取相对路径,避免多次文件系统遍历:
Get-ChildItem -Recurse | Where-Object { !$_.PSIsContainer } | ForEach-Object { $_.FullName.Substring($pwd.Path.Length + 1) }
!$_.PSIsContainer:直接排除文件夹(容器类型对象)- 截取逻辑:去掉当前工作目录的绝对路径前缀,生成符合要求的相对路径格式(如
dir-name1\file-name1.ext)
方案2:修复原命令的扩展名局限
如果偏好使用-Name参数直接返回相对路径格式,可通过二次校验排除文件夹:
Get-ChildItem -Recurse -Name | Where-Object { ! (Get-Item $_).PSIsContainer }
注:此方案会对每个返回条目调用Get-Item,性能略低于方案1,但写法更紧凑。
关键说明
- 原命令
Get-ChildItem -Recurse -Name -Include *.*的核心局限是会排除无扩展名的文件,上述方案均解决了该问题 - 两种方案均无需编写复杂脚本,仅通过PowerShell 2.0原生命令组合实现
内容的提问来源于stack exchange,提问作者safesphere
相关产品推荐
相关产品推荐

