我想使用PowerShell在变量中存储文本文件的整个内容(包括可能存在或可能不存在的空白行)。我还想知道文本文件中的总行数。什么是最有效的方法?
答案 0 :(得分:161)
另外,在PowerShell 3.0中,您可以将Get-Content
cmdlet与新的Raw开关一起使用:
$text = Get-Content .\file.txt -Raw
答案 1 :(得分:92)
获取文件的全部内容:
$content = [IO.File]::ReadAllText(".\test.txt")
行数:
([IO.File]::ReadAllLines(".\test.txt")).length
或
(gc .\test.ps1).length
包含尾随空行的hackish:
[io.file]::ReadAllText(".\desktop\git-python\test.ps1").split("`n").count
答案 2 :(得分:19)
(see detailed explanation here)
$text = Get-Content $filePath | Out-String
IO.File.ReadAllText
对我来说不适用于相对路径,它在%USERPROFILE%\$filePath
而不是当前目录中查找文件(至少从Powershell ISE运行时):
$text = [IO.File]::ReadAllText($filePath)
$text = Get-Content $filePath -Raw
答案 3 :(得分:13)
读取我喜欢的文件的另一种方法被称为变量符号或变量语法,并且简单地将filespec括在花括号中。一个美元符号,以及:
$content = ${C:file.txt}
此表示法可用作an L-value or an R-value;因此,您可以像这样轻松地写入文件:
${D:\path\to\file.txt} = $content
另一个方便的用途是你可以在没有临时文件和没有子表达式的情况下修改文件,例如:
${C:file.txt} = ${C:file.txt} | select -skip 1
我最初对这种符号着迷,因为很难找到任何关于它的东西!甚至PowerShell 2.0规范也只提到它只显示一行使用它 - 但没有任何解释或使用细节。我随后在PowerShell variables上发现了这篇博文,提供了一些很好的见解。
关于使用此内容的最后一点注意事项:您必须使用驱动器名称,即${drive:filespec}
,就像我在上面的所有示例中所做的那样。没有驱动器(例如${file.txt}
)它不起作用。对该驱动器上的filespec没有限制:它可以是绝对的或相对的。
答案 4 :(得分:1)
Get-Content抓取数据并将其逐行转储到数组中。假设没有其他特殊要求,您可以将内容保存到变量中吗?
$file = Get-Content c:\file\whatever.txt
仅运行$file
将返回完整内容。然后你可以做$file.Count
(因为数组已经内置了一个count方法)来获得总行数。
希望这有帮助!我不是一个脚本专家,但这对我来说比上面的很多东西更容易。