2014-01-06 3 views
2

동일한 파일에 gc (get-content)을 두 번 사용하고 -eq을 사용하여 문자열을 비교할 때 왜 불평등하지 않습니까? 내가 3 줄을 주석으로하지 않는왜 여러 줄 파일이 자신과 동일하지 않습니까?

$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., - 문제는 여러 파일을 발생하는 것 같습니다.

(현실적으로 필자는 파일을 실제 파일과 비교하지 않을 것이므로 일 수도 있고 일 수도있는 두 파일을 비교할 것입니다.)

저는 powershell 2.0을 사용하고 있습니다.

+0

참고 자아 [RTFM (http://technet.microsoft.com/en-us/library/hh849787 .aspx) ... – bacar

답변

4

파일에 한 줄만 있으면 작동하지만 -eq가 배열 연산자로 작동하는 방식 때문에 여러 줄이 있으면 실패합니다. 예상대로 작동하려면 두 항목을 스칼라 (단일 항목) 객체로 비교해야합니다. 한 가지 방법은 V3 이상인 경우 Get-Content에 -Raw 스위치를 추가하는 것입니다.

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)) 
+0

아, 배열을 반환한다는 것을 몰랐습니다. 감사! 거기 ps 2.0 동등한가? – bacar

+0

업데이트를 게시했습니다. – mjolinor

관련 문제