为什么多行文件不能比较自己?

时间:2014-01-06 20:08:39

标签: powershell

当我在同一个文件上使用gcget-content)两次,并使用-eq比较字符串时,为什么它会比较不等?

$f = "C:\temp\test.txt"
echo Hello > $f
echo World >>$f # works if I uncomment this line

gc $f

# get the contents of the file twice and compare it to itself.
if ((gc $f) -eq (gc $f)) {
    Write-Host "Hooray! The file is the same as itself."
} else {
    Write-Host "Boo."
}

打印Boo.,除非我注释掉第3行 - 问题似乎只出现在多行文件中。

(显然实际上我不会将文件与自身进行比较,在现实生活中我正在比较可能具有相同内容的两个文件)。

我正在运行powershell 2.0。

1 个答案:

答案 0 :(得分:4)

如果文件只有一行,那将会有效,但如果有多行则会失败,因为-eq用作数组运算符。为了使其按预期工作,您需要将它们作为标量(单个项目)对象进行比较。一种方法是在你有V3或更好的情况下将-Raw开关添加到Get-Content。

if ((gc $f -raw) -eq (gc $f -raw))

这会将整个文件读作单个多行字符串。

在V2中完成同样的事情:

if ([io.file]::ReadAllText($f)) -eq ([io.file]::ReadAllText($f))

if ([string](gc $f) -eq [string](gc $f))