/ / Por que um arquivo com várias linhas não se compara a si próprio? - PowerShell

Por que um arquivo de várias linhas não se compara a si mesmo? - powershell

Quando eu uso gc (get-content) no mesmo arquivo duas vezes e compare as cadeias usando -eq, por que ele compara desigual?

$f = "C:temptest.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."
}

Impressões Boo., a menos que eu comente a terceira linha - o problema parece ocorrer apenas com arquivos com várias linhas.

(obviamente, na realidade, eu não compararia o arquivo com ele mesmo, na vida real eu compararia dois arquivos que poderia têm conteúdo idêntico).

Estou executando o powershell 2.0.

Respostas:

4 para resposta № 1

Isso funcionará se o arquivo tiver apenas uma linha, masfalhará se houver várias linhas devido à maneira como -eq funciona como um operador de matriz. Para que funcione conforme o esperado, você precisa comparar os objetos escalares (item único). Uma maneira de fazer isso é adicionar a opção -Raw ao Get-Content, se você tiver a V3 ou melhor.

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

Isso lerá o arquivo inteiro como uma única sequência de várias linhas.

Para realizar o mesmo na V2:

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

ou

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