PowerShell脚本开发:如何筛选根目录下的Directory类型对象并存储目录名
解决PowerShell筛选根目录目录并存储目录名的问题
没问题,我来帮你搞定这个PowerShell的目录筛选问题!之前你遇到的-ItemType Directory没生效的情况,大概率是使用方式或者路径的小问题,下面给你一步步的解决方案:
1. 正确筛选根目录下的Directory对象
首先,确保你使用的是正确的命令格式,针对根目录(比如C:\),直接用Get-ChildItem配合-ItemType Directory就能精准筛选目录,要是需要包含隐藏目录,记得加上-Force参数:
# 获取C盘根目录下的所有目录(含隐藏目录) $rootDirectories = Get-ChildItem -Path "C:\" -ItemType Directory -Force
如果你的根目录是其他路径,替换"C:\"就行。要是还是觉得-ItemType不够灵活,也可以通过PowerShell内置的PSIsContainer属性来判断(目录的该属性为$true):
$rootDirectories = Get-ChildItem -Path "C:\" | Where-Object { $_.PSIsContainer }
2. 将目录名存储到数组或泛型列表
接下来你要提取目录名并存储,这里分两种方式:
方式一:存储到PowerShell数组(最简单)
直接提取目录的Name属性就能得到目录名数组:
# 一步到位获取目录名数组 $dirNamesArray = Get-ChildItem -Path "C:\" -ItemType Directory -Force | Select-Object -ExpandProperty Name
方式二:存储到你创建的泛型List
你之前创建了泛型列表,那可以通过ForEach-Object逐个添加,或者直接把数组转成列表:
# 初始化泛型List(建议指定string类型更严谨) $sidepaths = New-Object System.Collections.Generic.List[string] # 方式1:逐个添加目录名 Get-ChildItem -Path "C:\" -ItemType Directory -Force | ForEach-Object { $sidepaths.Add($_.Name) } # 方式2:先获取数组再转成List(更简洁) $dirNamesArray = Get-ChildItem -Path "C:\" -ItemType Directory -Force | Select-Object -ExpandProperty Name $sidepaths = [System.Collections.Generic.List[string]]$dirNamesArray
排查之前的问题
你之前用-ItemType Directory没生效,可能的原因:
- 路径用了相对路径,建议改用绝对路径避免歧义
- 没有加
-Force,导致隐藏目录被过滤,看起来像是没筛选到 - 权限问题:部分系统目录你没有访问权限,会被跳过,可以加上
-ErrorAction SilentlyContinue来忽略错误
内容的提问来源于stack exchange,提问作者du7ri
相关产品推荐
相关产品推荐

