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
相关产品推荐
相关产品推荐

