/ / Pourquoi un fichier multiligne ne se compare-t-il pas à lui-même? - Powershell

Pourquoi un fichier multiligne ne se compare-t-il pas à lui-même? - Powershell

Quand j'utilise gc (get-content) sur le même fichier deux fois, et comparez les chaînes en utilisant -eq, pourquoi compare-t-il inégale?

$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."
}

Impressions Boo., sauf si je commente la 3ème ligne - le problème ne semble se produire qu'avec des fichiers multilignes.

(évidemment, en réalité, je ne voudrais pas comparer le fichier à lui-même, dans la vie réelle, je compare deux fichiers qui pourrait avoir un contenu identique).

Je suis en cours de Powershell 2.0.

Réponses:

4 pour la réponse № 1

Cela fonctionnera si le fichier n'a qu'une ligne, maiséchouera s'il y a plusieurs lignes en raison de la façon dont -eq fonctionne en tant qu'opérateur de tableau. Pour que cela fonctionne comme prévu, vous devez comparer les deux objets scalaires (élément unique). Une solution consiste à ajouter le commutateur -Raw à Get-Content si vous avez la version 3 ou supérieure.

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

Cela lira l'intégralité du fichier en une chaîne unique de plusieurs lignes.

Pour accomplir la même chose dans la V2:

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

ou

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