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

我想使用PowerShell将文本文件的全部内容(包括可能存在或不存在的空行)存储在一个variables中。 我也想知道文本文件中的行数。 什么是最有效的方法来做到这一点?

要获取文件的全部内容:

$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 

Powershell 2.0:

(详细请看这里)

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

IO.File.ReadAllText在我的相对path中不起作用,它在%USERPROFILE%\$filePath查找文件,而不是当前目录(至less从Powershell ISE运行时):

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

Powershell 3+:

 $text = Get-Content $filePath -Raw 

另外一种读取我喜欢的文件的方法被称为variables记法variables语法,并且只涉及在一个美元符号之前的大括号内封装一个filespec,

 $content = ${C:file.txt} 

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

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

另一个便利的用途是,您可以在没有临时文件且没有子expression式的情况下修改文件,例如:

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

最初我对这个符号很着迷,因为很难find任何有关它的东西! 即使PowerShell 2.0规范提到它只显示一条线就可以使用它 – 但没有任何解释或使用细节。 随后我在PowerShellvariables中find了这个博客文章,提供了一些很好的见解。

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

Get-Content抓取数据并逐行将其转储到数组中。 假设没有其他特殊要求,你可以将你的内容保存到一个variables中?

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

只运行$file将返回完整的内容。 然后,你可以做$file.Count (因为数组已经有一个计数方法内置)来获得总的行数。

希望这可以帮助! 我不是一个脚本专家,但是这对我来说似乎比上面的很多东西更容易。