当我在同一个文件上使用gc
(get-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。
答案 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))