Windows Powershell에서 두 개의 텍스트 파일을 어떻게 다른가요?

두 개의 텍스트 파일이 있는데 Windows Powershell을 사용하여 차이점을 찾고 싶습니다. 유닉스 diff 도구와 비슷한 것이 있습니까? 아니면 내가 고려하지 않은 다른 방법이 있습니까?

비교 객체를 시도했지만이 암호 출력을 얻습니다.

PS C:\> compare-object one.txt two.txt

InputObject                                                 SideIndicator
-----------                                                 -------------
two.txt                                                     =>
one.txt                                                     <=



답변

그것을 스스로 알아 냈습니다. Powershell은 텍스트가 아닌 .net 객체와 작동하므로 텍스트 파일의 내용을 표시하려면 get-content를 사용해야합니다. 그래서 질문에서하려고했던 것을 수행하려면 다음을 사용하십시오.

compare-object (get-content one.txt) (get-content two.txt)


답변

간단한 방법은 다음과 같습니다.

diff (cat file1) (cat file2)


답변

또는 DOS fc명령을 사용할 수 있습니다 (두 파일의 출력을 표시하므로 차이점을 스캔해야합니다).

fc.exe filea.txt fileb.txt > diff.txt

fc는 Format-Custom cmdlet의 별칭이므로 명령을로 입력해야합니다fc.exe . 많은 DOS 유틸리티는 UTF-8 인코딩을 처리하지 않습니다.

CMD 프로세스를 생성하고 fc그 안에서 실행할 수도 있습니다.

start cmd "/c  ""fc filea.txt fileb.txt >diff.txt"""

그러면 PowerShell에서 매개 변수를 따옴표로 묶어 ‘cmd’프로그램으로 프로세스를 시작하도록 지시합니다. 따옴표 안에 명령을 실행하고 종료하는 ‘/ c’cmd 옵션이 있습니다. 프로세스에서 cmd가 실행하는 실제 명령 fc filea.txt fileb.txt은 출력을 파일로 리디렉션하는 것 diff.txt입니다.

fc.exepowershell 내 에서 DOS 를 사용할 수 있습니다 .


답변

dinix on diff는 쉘의 일부가 아니라 별도의 응용 프로그램입니다.

PowerShell에서 diff.exe를 사용할 수없는 이유가 있습니까?

UnxUtils 패키지 ( http://unxutils.sourceforge.net/ ) 에서 버전을 다운로드 할 수 있습니다.


답변

비교 객체 (일명 diff 별명)는 유닉스 diff와 같은 행동을 기대한다면 한심한 것입니다. diff (gc file1) (gc file2)를 시도했지만 줄이 너무 길면 실제 diff를 볼 수 없으며 더 중요한 것은 diff가 어느 줄 번호에 있는지 알 수 없습니다.

-passthru를 추가하려고하면 이제 차이점을 볼 수 있지만 차이점이있는 파일을 잃어 버리고 여전히 줄 번호를 얻지 못합니다.

내 조언, 파일의 차이점을 찾기 위해 powershell을 사용하지 마십시오. 다른 사람이 지적했듯이 fc는 비교 객체보다 작동하고 조금 더 잘 작동하며 Mikeage가 언급 한 유닉스 에뮬레이터와 같은 실제 도구를 다운로드하여 사용하는 것이 더 좋습니다.


답변

다른 사람들이 지적했듯이, UNIX diff 출력을 기대하고 있다면 powershell diff 별칭을 사용하면 어려움을 겪을 수 있습니다. 우선, 실제로 파일을 읽는 데 손을 잡고 있어야합니다 (gc / get-content). 다른 점으로는 차이 표시가 내용과는 거리가 먼 오른쪽에 있습니다. 가독성 악몽입니다.

제정신 출력을 찾는 모든 사람을위한 솔루션은

  1. 실제 diff를 얻습니다 (예 : GnuWin32에서)
  2. % USERPROFILE % \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1 편집
  3. 라인을 추가

    remove-item alias:diff -force

Powershell은이 내장 된 별명에 대해 매우 귀중하므로 -force 인수가 필요합니다. GnuWin32를 설치하고 싶은 사람이라면 powershell 프로필에 다음 내용도 포함시킵니다.

remove-item alias:rm
remove-item alias:mv
remove-item alias:cp

Powershell은 함께 실행되고 입력되는 인수를 이해하지 못하므로 “rm -Force -Recurse”는 “rm -rf”보다 훨씬 많은 노력이 필요합니다.

Powershell에는 멋진 기능이 있지만 나를 위해 시도해서는 안되는 몇 가지 사항이 있습니다.


답변

WinMerge 는 또 다른 유용한 GUI 기반 diff 도구입니다.