Answers:
要获取文件的全部内容:
$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
\r\n
将被计数。
Invoke-WebRequest
?
附带说明一下,在PowerShell 3.0中,可以将Get-Content
cmdlet与新的Raw开关一起使用:
$text = Get-Content .\file.txt -Raw
Get-Content
做到了,但是直到3.0才实现了-Raw
。没有它,它将被存储为行数组。
$text = Get-Content $filePath | Out-String
在IO.File.ReadAllText
没有为我使用相对路径的工作,它看起来在文件中%USERPROFILE%\$filePath
,而不是当前目录(至少从PowerShell ISE中运行时):
$text = [IO.File]::ReadAllText($filePath)
$text = Get-Content $filePath -Raw
[IO.File]::ReadAllText((Resolve-Path $filePath))
读取我碰巧喜欢的文件的另一种方法被称为可变符号或可变语法,并且涉及将文件规范简单地用大括号括起来并加一个美元符号,例如:
$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}
),它将无法工作。该驱动器上的filespec不受任何限制:它可以是绝对的或相对的。
$content = [IO.File]::ReadAllText(".\test.txt")
似乎做与$content = (gc ".\test.txt" | out-string)
。由于两者中的第二个较短,所以这是我更喜欢的。不幸的是,您提供的用于计算总行数的方法均未考虑尾随空白行。还有其他想法吗?