【问题标题】:Get-ChildItem RuntimeException: Cannot index into null arrayGet-ChildItem RuntimeException:无法索引到空数组
【发布时间】:2016-08-10 16:38:31
【问题描述】:

我正在尝试用 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:

无法索引到空数组。
在 C:\Users\mosermich\Desktop\Import-Datan-Uploader\Uploader.ps1:158 Char:9
+ $content[7] = ' rel_nr 常量“{0}”' -f $releasenr
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

我做错了什么?

【问题讨论】:

  • 请显示准确的、未更改的错误消息。 C:\sample 是否包含 .txt 文件?所有这些文件都至少有 8 行吗?
  • 我已将错误消息添加到问题中。该文件夹确实包含文件,每个文件至少有 30 多行。

标签: powershell


【解决方案1】:

尝试更换

$content = Get-Content $_

$content = Get-Content $_.FullName

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

我还会考虑保护您的语句以确保它有超过 8 行,只是为了避免潜在的错误作为一种良好的做法。

【讨论】:

  • 谢谢!工作完美。 $_.Fullname 怎么可能修复了脚本?循环是否仅使用 $_ 无法正确读取文件?
  • 当你在不同的地方跑步时;仅使用 $_ 的 Get-Content 将解析为文件名而不是全名;因此它找不到它试图获取内容的文件。因此,使用 Fullname 将为它提供完整路径。当文件在同一个文件夹中时它起作用的原因是它会从工作目录中搜索。
  • 非常感谢您的解决方案和解释。
猜你喜欢
  • 2017-07-01
  • 2018-09-14
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多