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
(因为数组已经有一个计数方法内置)来获得总的行数。
希望这可以帮助! 我不是一个脚本专家,但是这对我来说似乎比上面的很多东西更容易。