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

Nic*_*ick 104 powershell

我想使用PowerShell将变量中的文本文件的全部内容(包括可能存在或可能不存在的尾随空行)存储起来.我还想知道文本文件中的总行数.最有效的方法是什么?

Sha*_*evy 170

另外,在PowerShell 3.0中,您可以将Get-Contentcmdlet与新的Raw开关一起使用:

$text = Get-Content .\file.txt -Raw 
Run Code Online (Sandbox Code Playgroud)

  • @MatteoSp`Get-Content`做了,但直到3.0才得到`-Raw`.没有它,它将被存储为一系列行. (9认同)
  • 这应该是公认的答案.顺便说一下,我很确定Get-Content甚至可以在早期版本中运行. (2认同)

man*_*lds 108

要获取文件的全部内容:

$content = [IO.File]::ReadAllText(".\test.txt")
Run Code Online (Sandbox Code Playgroud)

行数:

([IO.File]::ReadAllLines(".\test.txt")).length
Run Code Online (Sandbox Code Playgroud)

要么

(gc .\test.ps1).length
Run Code Online (Sandbox Code Playgroud)

有点hackish包括尾随空行:

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


Kap*_*apé 21

Powershell 2.0:

(见这里的详细说明)

$text = Get-Content $filePath | Out-String
Run Code Online (Sandbox Code Playgroud)

IO.File.ReadAllText对我来说不适用于相对路径,它会查找文件%USERPROFILE%\$filePath而不是当前目录(至少从Powershell ISE运行时):

$text = [IO.File]::ReadAllText($filePath)
Run Code Online (Sandbox Code Playgroud)

Powershell 3+:

$text = Get-Content $filePath -Raw
Run Code Online (Sandbox Code Playgroud)


Mic*_*ens 13

读取我喜欢的文件的另一种方法是不同地称为变量符号变量语法,并且简单地将文件规范封装在以美元符号开头的花括号中,即:

$content = ${C:file.txt}
Run Code Online (Sandbox Code Playgroud)

该表示法可以用作L值或R值 ; 因此,您可以像这样轻松地写入文件:

 ${D:\path\to\file.txt} = $content
Run Code Online (Sandbox Code Playgroud)

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

${C:file.txt} = ${C:file.txt} | select -skip 1
Run Code Online (Sandbox Code Playgroud)

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

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