PowerShell哈希表添加元素报错:无法索引到空数组
问题:哈希表存入值时触发「Cannot index into a null array」错误
问题描述
- 执行PowerShell代码时,尝试将文件路径作为键、拆分路径得到的组件ID作为值存入哈希表,触发报错:
Cannot index into a null array. - 获取文件路径的逻辑正常,单独测试拆分路径逻辑也可行,但结合哈希表
Add方法时出错 - 测试使用固定值作为值时可以正常存入,使用拆分表达式则报错
原代码
$fullPathU3 = (Get-ChildItem -Path "P:\Example\Component\Place\Ready" -Recurse -Depth 1| Where-Object {($_.Name -like "*thing") -and ($_.Name -Notlike "*unlinke*") -and ($_.Name -Notlike "*old")}).fullName $fullPathU3 = $fullPathU3 | sort $fileCompTable = New-Object System.Collections.Hashtable $fileCompTable = @{} $fileCompTable.Add($fullPathU3[1] , ($fullPathU3[1] -split "\\")[5])
问题原因
报错核心有两个可能:
- 目标数组元素不存在:如果
Get-ChildItem返回的结果少于2个,$fullPathU3[1]会是null,拆分null会得到空数组,访问[5]自然触发空数组索引错误 - 路径拆分后段数不足:即使
$fullPathU3[1]存在,拆分后的路径段数量可能不足6个(数组索引从0开始,[5]是第6个元素),导致索引越界
修复代码
# 获取并排序文件路径 $fullPathU3 = Get-ChildItem -Path "P:\Example\Component\Place\Ready" -Recurse -Depth 1 | Where-Object { $_.Name -like "*thing" -and $_.Name -notlike "*unlinke*" -and $_.Name -notlike "*old" } | Select-Object -ExpandProperty FullName | Sort-Object # 初始化哈希表(无需重复创建再覆盖) $fileCompTable = @{} # 安全访问数组元素并处理路径拆分 if ($fullPathU3.Count -ge 2) { $targetPath = $fullPathU3[1] $pathSegments = $targetPath -split "\\" if ($pathSegments.Count -ge 6) { $fileCompTable.Add($targetPath, $pathSegments[5]) } else { Write-Warning "路径 $targetPath 拆分后不足6段,无法获取组件ID" } } else { Write-Warning "找到的文件数量不足2个,无法访问索引1的元素" }
后续循环优化建议
如果要遍历所有路径存入哈希表,可使用带校验的循环:
foreach ($path in $fullPathU3) { $pathSegments = $path -split "\\" if ($pathSegments.Count -ge 6) { $fileCompTable[$path] = $pathSegments[5] } else { Write-Warning "跳过路径 $path:拆分后段数不足" } }
内容的提问来源于stack exchange,提问作者aaro grill
相关产品推荐
相关产品推荐

