PowerShell获取目录文件数组时无法移除脚本路径问题求解
报错原因
- PowerShell 中使用
@()声明的普通数组为固定长度类型,原生不支持直接删除元素,你尝试删除元素时就会触发固定大小的报错。 - 原代码中使用字符串替换脚本名获取目录的写法存在兼容性缺陷,若脚本名称修改、或路径中凑巧包含脚本名字符串,会导致目录获取错误。
最优实现方案
直接在遍历文件阶段过滤当前脚本,无需后续删除操作,代码如下:
# 获取当前脚本完整路径 $scriptFullPath = $MyInvocation.MyCommand.Definition # 提取脚本所在目录路径 $scriptDir = Split-Path -Path $scriptFullPath -Parent # 直接获取目录下所有文件,过滤脚本自身,生成目标路径数组 $targetFileArray = (Get-ChildItem -Path $scriptDir -File | Where-Object { $_.FullName -ne $scriptFullPath }).FullName
生成的$targetFileArray即为符合要求的数组,遍历可以直接用更简洁的遍历方式:
foreach ($filePath in $targetFileArray) { $filePath }
动态数组修改方案
如果你确实需要对数组做增删操作,可以使用支持动态修改的ArrayList类型替换普通数组:
# 声明动态数组 $dynamicArray = [System.Collections.ArrayList]@() # 填充元素后可直接调用删除方法移除脚本路径 $dynamicArray.Remove($scriptFullPath)
内容的提问来源于stack exchange,提问作者user16767298
相关产品推荐
相关产品推荐

