我想使用 PowerShell 将文本文件的 完整的内容(包括可能存在也可能不存在的尾部空行)存储在一个变量中。我还想知道文本文件中的总行数。最有效的方法是什么?
获取文件的全部内容:
$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:
Get-Content
$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})它就不能工作。对该驱动器上的文件规范没有限制: 它可以是绝对的或相对的。
${drive:filespec}
${file.txt}
(详情请参阅此处)
$text = Get-Content $filePath | Out-String
使用相对路径时,abc0无法工作,它在 abc1中查找文件,而不是工作目录(至少在从 Powershell ISE 运行时) :
$text = [IO.File]::ReadAllText($filePath)
$text = Get-Content $filePath -Raw
Get-Content 获取数据并将其逐行转储到数组中。假设没有列出的其他特殊需求,您可以将内容保存到一个变量中吗?
$file = Get-Content c:\file\whatever.txt
只运行 $file将返回完整的内容。然后您可以执行 $file.Count(因为数组已经内置了 count 方法)来获取行的总数 # 。
$file
$file.Count
希望这个能帮上忙!我不是一个脚本天才,但这对我来说似乎比上面的许多东西更容易。