我正在尝试使用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
我做错了什么?
答案 0 :(得分:2)
尝试更换
$content = Get-Content $_
带
$content = Get-Content $_.FullName
当您在其他位置运行时,Get-Content
仅使用$_
将解析为文件名而不是完整路径,因此无法找到它尝试从中获取内容的文件。使用FullName
将为其提供完整路径。当文件在同一文件夹中时它起作用的原因是它会从工作目录中搜索。
我还会考虑保护你的陈述,以确保它有超过8行,只是为了避免潜在的错误,这是一个好的做法。