Get-ChildItem RuntimeException:无法索引到null数组

时间:2016-08-10 07:58:10

标签: powershell

我正在尝试使用PowerShell脚本替换多个文件和多个文件夹中的一行:

Get-ChildItem -Filter '*.txt' | ForEach-Object {
    $content = Get-Content $_
    $content[7] = '    rel_nr    constant "{0}"' -f $releasenr
    $content | Set-Content -Path $_.FullName
}

如果文件与脚本位于同一文件夹中,但只要我尝试实现

,脚本就可以正常工作
Get-ChildItem -Path C:\sample -Filter '*.txt' | ForEach-Object {

该脚本返回RuntimeException:

Cannot index into a null array.
In C:\Users\mosermich\Desktop\Import-Daten-Uploader\Uploader.ps1:158 Char:9
+         $content[7] = '    rel_nr    constant "{0}"' -f $releasenr
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

我做错了什么?

1 个答案:

答案 0 :(得分:2)

尝试更换

$content = Get-Content $_

$content = Get-Content $_.FullName

当您在其他位置运行时,Get-Content仅使用$_将解析为文件名而不是完整路径,因此无法找到它尝试从中获取内容的文件。使用FullName将为其提供完整路径。当文件在同一文件夹中时它起作用的原因是它会从工作目录中搜索。

我还会考虑保护你的陈述,以确保它有超过8行,只是为了避免潜在的错误,这是一个好的做法。