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

PowerShell函数添加文件列表报错:无法对空值表达式调用方法

问题修复方案

你的错误根源是没有初始化$fileList这个List实例,只是声明了类型约束但没创建对象,导致调用AddRange时它还是null。另外还有个小问题:你声明的是DirectoryInfo类型的List,但Get-ChildItem -File返回的是FileInfo对象,类型不匹配。

修复后的完整代码

function CheckFilesToDelete([string[]]$fList) {
    # 正确初始化FileInfo类型的List实例
    [System.Collections.Generic.List[System.IO.FileInfo]]$fileList = [System.Collections.Generic.List[System.IO.FileInfo]]::new()

    foreach($folderName in $fList) {
        $path = $folderName  # 直接用$folderName即可,无需额外引号包裹

        # 获取匹配TMP的文件,用@()确保始终返回数组,避免单文件时的标量问题
        $list = @(Get-ChildItem $path -File -Recurse | Where-Object { $_.Name -match 'TMP' })
        
        # 只要$list不为空就添加,PowerShell中空数组会被视为假值
        if ($list) {
            $fileList.AddRange($list)
        }
    }

    return $fileList
}

关键修改点说明

  • 初始化List实例:用::new()构造函数创建List对象,而非仅声明类型。
  • 修正类型匹配:把DirectoryInfo改成FileInfo,和Get-ChildItem -File的返回类型保持一致。
  • 简化代码逻辑:
    • 去掉多余的括号和> null(赋值给变量会自动抑制输出,若需显式抑制可改用| Out-Null)。
    • 正则.*TMP.*简化为TMP,因为-match默认是包含匹配,无需前后通配符。
    • 用if ($list)替代复杂的null和Count判断,PowerShell会自动识别空数组为假值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:15:19