You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell获取子文件夹列表时包含初始目录的实现方案

解决PowerShell获取包含初始目录的目录集合问题

问题根源

Get-ChildItem -Path $initialPath -Recurse -Directory仅返回指定目录的子文件夹,不包含初始目录本身;当目标目录无下属子文件夹时,该命令返回空集合,导致后续处理逻辑无法执行。直接尝试将初始目录的DirectoryInfo对象与该命令结果相加时,会因DirectoryInfo类型不支持加法操作报错:Method invocation failed because [System.IO.DirectoryInfo] does not contain a method named 'op_Addition'。

可行解决方案

方案1:数组组合法(最简洁)

先单独获取初始目录的DirectoryInfo对象,将其转为数组后,再与递归获取的子文件夹集合相加:

# 获取初始目录对象
$initialDir = Get-Item -Path $initialPath
# 组合初始目录与所有子目录
$allDirs = @($initialDir) + (Get-ChildItem -Path $initialPath -Recurse -Directory)
  • @($initialDir)将单个DirectoryInfo对象转为数组,确保可以与Get-ChildItem返回的集合(数组类型)执行加法操作。
  • 无论初始目录是否有子文件夹,$allDirs都会包含初始目录本身。

方案2:.NET API 调用法

直接使用.NET的DirectoryInfo类方法枚举子目录,再与初始目录组合:

# 初始化DirectoryInfo对象
$initialDir = [System.IO.DirectoryInfo]$initialPath
# 获取所有子目录(递归)并与初始目录组合
$allDirs = @($initialDir) + $initialDir.EnumerateDirectories("*", [System.IO.SearchOption]::AllDirectories)
  • 此方法性能略优,尤其是处理大量目录时,EnumerateDirectories会延迟加载结果。

关于“父目录过滤”思路的说明

无需绕路到父目录再过滤同级目录——直接获取初始目录对象的方式更高效、简洁,避免了额外的过滤逻辑。如果一定要用父目录的方式,示例如下(不推荐):

$parentDir = Split-Path -Path $initialPath -Parent
$allDirs = Get-ChildItem -Path $parentDir -Directory | Where-Object FullName -eq $initialPath
$allDirs += Get-ChildItem -Path $initialPath -Recurse -Directory

这种方法多了一步父目录遍历和过滤,不如前两种方案直接。

内容的提问来源于stack exchange,提问作者miguello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:57:41