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

PowerShell函数传参报错:无法索引空数组问题排查

问题分析与解决

核心错误点

  • 参数类型不匹配:函数将$FldPath定义为[String[]](字符串数组),但调用时传入的是Get-ChildItem -Directory返回的DirectoryInfo对象数组。PowerShell强制转换对象数组为字符串数组时,会把每个文件夹对象转为名称字符串,而非保留对象本身,导致$FldPath不再包含FullName属性,访问$FldPath.FullName得到null,索引时触发"无法索引到空数组"错误。
  • 属性访问语法错误:即便参数类型正确,$FldPath.FullName[$i]的写法也不符合PowerShell数组对象的访问逻辑。正确逻辑是先索引数组元素$FldPath[$i],再访问其FullName属性,即$FldPath[$i].FullName。
  • 语法冗余:$NewFld一行末尾多了一个右括号,属于语法错误。

修正后的代码

修正后的函数

Function RenameFolderFiles{
    param(
        # 改为DirectoryInfo数组类型,匹配传入的对象类型
        [System.IO.DirectoryInfo[]]$FldPath, 
        [String]$TypeFld
    )
    
    Write-Host $TypeFld " : " $FldPath.Length
    Write-Host $FldPath
    for ( $i = 0; $i -lt $FldPath.Length; $i++ ) {
        # 先取数组元素,再访问FullName属性
        write-host $i " : " $FldPath[$i].FullName
        # 移除多余的右括号
        $NewFld = ([string]$FldPath[$i].FullName).Replace(" _ tt","")
        # 可添加实际重命名逻辑,例如:
        # Rename-Item -Path $FldPath[$i].FullName -NewName $NewFld
    }
}

调用代码(无需修改)

$Fld = Get-ChildItem -Path "$varCheminRepertoireScript" -Recurse -Directory | Where-Object {$_.FullName -like "* _ tt*"}

RenameFolderFiles -FldPath $Fld -TypeFld "Nb of Folders & Sub-Folders"

额外说明

如果不需要严格指定参数类型,也可以去掉[System.IO.DirectoryInfo[]]约束,让PowerShell自动推断传入的对象类型,代码依然能正常运行:

param(
    $FldPath, 
    [String]$TypeFld
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:05:30