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 № 1Isso 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))