PowerShell: 将整个文本文件内容存储在变量中

我想使用 PowerShell 将文本文件的 完整的内容(包括可能存在也可能不存在的尾部空行)存储在一个变量中。我还想知道文本文件中的总行数。最有效的方法是什么?

222381 次浏览

获取文件的全部内容:

$content = [IO.File]::ReadAllText(".\test.txt")

行数:

([IO.File]::ReadAllLines(".\test.txt")).length

或者

(gc .\test.ps1).length

包括后面的空行有点骇人听闻:

[io.file]::ReadAllText(".\desktop\git-python\test.ps1").split("`n").count

另外,在 PowerShell 3.0中,你可以使用带有新的 Raw 开关的 Get-Content cmdlet:

$text = Get-Content .\file.txt -Raw

还有一种读取我喜欢的文件的方法被称为 变量表示法变量语法,只需要在花括号中加上一个文件规范,前面加上一个美元符号即可:

$content = ${C:file.txt}

这个符号可以作为 L 值或 R 值使用; 因此,您也可以使用类似下面的内容轻松地写入文件:

 ${D:\path\to\file.txt} = $content

另一个方便的用途是,您可以在没有临时文件和没有子表达式的情况下就地修改文件,例如:

${C:file.txt} = ${C:file.txt} | select -skip 1

起初我对这个符号很着迷,因为很难找到任何关于它的东西!甚至连 PowerShell 2.0规范也只提到了一次,只显示了一行使用它——但是根本没有解释或使用细节。随后我在 PowerShell 变量上发现了这篇博客文章,它提供了一些很好的见解。

关于使用它的最后一个注意事项: 您必须使用一个驱动器名称,即 ${drive:filespec},正如我在上面的所有示例中所做的那样。没有驱动器(例如 ${file.txt})它就不能工作。对该驱动器上的文件规范没有限制: 它可以是绝对的或相对的。

Powershell 2.0:

(详情请参阅此处)

$text = Get-Content $filePath | Out-String

使用相对路径时,abc0无法工作,它在 abc1中查找文件,而不是工作目录(至少在从 Powershell ISE 运行时) :

$text = [IO.File]::ReadAllText($filePath)

Powershell 3 + :

$text = Get-Content $filePath -Raw

Get-Content 获取数据并将其逐行转储到数组中。假设没有列出的其他特殊需求,您可以将内容保存到一个变量中吗?

$file = Get-Content c:\file\whatever.txt

只运行 $file将返回完整的内容。然后您可以执行 $file.Count(因为数组已经内置了 count 方法)来获取行的总数 # 。

希望这个能帮上忙!我不是一个脚本天才,但这对我来说似乎比上面的许多东西更容易。