2011-07-29 92 views
215

我知道有一個帖子與此類似:here
我試過用上面提到的comp命令,但是如果我有兩個文件,一個是數據「abcd」,另一個是數據「abcde」,它只是說文件大小不同。我想知道它們究竟有什麼不同。在Unix中,如果我有類似「abd」和「abc」的內容,簡單差異會告訴我哪個行和列,windows中的comp命令有效。否則。任何想法我可以用這個?什麼是diff命令的Windows等價物?

回答

345

運行此在CMD殼或批處理文件:

FC file1 file2 

FC也可用於比較二進制文件:

FC /B file1 file2 
+1

輝煌!謝謝! :) – wittythotha

+0

你如何做到這一點與兩個文件夾中的所有更改的文件?比如,我將folder1的內容與folder2的內容進行比較:folder2中的任何更改的行顯示出來了? –

+11

@ Wolfpack'08「:'FC path1 \ * FC path2 \ *'會比較文件夾'path1'和'path2'中的所有文件,只要它們(文件)具有相同的名稱;如果存在名稱不匹配的文件,FC會報告一個丟失的文件,但僅用於在第二個文件夾中找不到的第一個文件夾的文件,而不是反過來,爲了捕獲所有的不匹配,可能需要一種不同的技術 –

20

Winmerge有command line utility,可能值得一試。

此外,您也可以根據需要使用它的圖形部分。

+2

雖然這不是一個內置的Windows實用程序,但我強烈建議它 - 它是開源的,重量輕,並且以我的經驗無bug。 –

+1

@ david.barkhuizen他們嚴格地在sourceforge上託管他們的文件太糟糕了。 – Mo2

4

DiffUtils可能是你最好的選擇。這是Windows的等值差異。

據我所知,沒有內置的等價物。

+0

但是,我也使用過,但是,今天我發現在該頁面上提供的漂亮的舊版本2.8.7有一個錯誤(比較某些PDF文件時,它們被報告爲相等)。所以現在更喜歡firelight建議的「git diff」。 – anre

24

好了,在Windows上我愉快地運行diff和許多其他的GNU工具。你可以用cygwin來做,但我個人更喜歡GnuWin32,因爲它是一個更輕的安裝體驗。

所以,我的回答是,Windows相當於diff,不過是diff本身!

+0

Cygwin的基本安裝似乎沒有包含diff。我需要安裝哪些附加軟件包才能獲得它? –

+5

我不推薦cygwin。我會使用差異的原生Win32端口 –

+1

@WarrenDew您需要的Cygwin軟件包是'diffutils'。請參閱https://cygwin.com/cgi-bin2/package-cat.cgi?file=x86_64%2Fdiffutils%2Fdiffutils-3.3-2&grep=diff –

8

fc。 fc比Cygwin的差異更好地處理大文件(> 4 GB)。

7

還有Powershell(它是Windows的一部分)。它不是快速但靈活,這是基本的命令。如果您需要更好的格式,人們已經爲它編寫了各種cmdlet和腳本。

PS C:\Users\Troll> Compare-Object (gc $file1) (gc $file2) 

的Windows不是一部分,但如果你是使用Visual Studio的開發人員,它帶有WinDiff的(圖形)

但我個人最喜歡的是BeyondCompare,售價$ 30

12

另一種選擇是從http://git-scm.com/downloads下載並安裝git。然後,將Git \ bin \的路徑添加到PATH變量中。這不僅會給你diff,還會給你很多其他的linux命令,你可以在windows命令行中使用它們。

+0

這就是我所做的 –

+0

這種方法對我的團隊最有效。安裝GIT非常簡單。這使您可以像Linux一樣運行精確的Diff命令行可執行文件。 – CoryCowgill

+0

@firelight - 謝謝你的回答。您可以詳細說明您的意思:「然後,將路徑添加到Git \ bin \ PATH變量中。」 – BKSpurgeon

1

您收到COMP錯誤的原因是該實用程序假定您正在比較的文件具有相同的大小。要解決這個問題,您可以使用第'/n'選項,您可以使用該選項指定要比較的行數。 (見比較支持的選項通過在命令行上鍵入'comp /?' 所以你的命令如下所示:。

C:\>comp "filepath1" "filepath2" /a /l /n=(the number of lines you want to compare) /c 

,如果你想堅持使用COMP這應該解決您的問題,但是這將是一個問題真的很大的文件。

雖然comp是一個選項,但我覺得它是原始的,FC是一個更好的選擇。如果您需要頻繁使用0123com和FC,則可能會使用一個非常好的filecompare實用程序。

FC採用這種方式對於裁判:

C:\>fc /c(case insensistive) /lbn(number of errors allowed before you wanna stop compare) /n(display line number) "filename1" "filename2" 

有許多可供選擇,您可以通過'fc /?' 希望看到這有助於

7

FC在我的情況下,它是不是有幫助的偉大工程我只想要改變的線條。 FC還提供文件名,相同行和雙邊比較等額外數據。

>fc data.txt data.txt.bak 
    ***** DATA.TXT 
    ####09 
    ####09 
    ####09 
    ***** DATA.TXT.BAK 
    ####09 
    ####08 
    ####09 

但對我來說,我想只有已更改的線,並希望那些線導出到不同的文件,沒有任何其他的頭或數據。

所以我用「FINDSTR」比較文件:

findstr /V /G:data.txt.bak data.txt >DiffResult.txt 

其中:

data.txt.bak是舊文件

data.txt的名稱爲新的文件

DiffResult.txt包含更改的數據,即只有一個line #### 09

+0

**/A **僅更改塊的第一行和最後一行添加或更新用戶變量中的PATH變量**/N **顯示行號 – Lukas

0

我不知道下面的工具是你需要什麼exatly。但我喜歡使用特定的文件,一些在線工具。不管操作系統如何,我都可以使用它。下面是一個例子:diffchecker.com

但是對於我的需求,我猜想跟蹤項目文件的更改和日誌的最佳工具是GIT。如果你在一個團隊中工作,你可以在你的服務器上進行一些回購,或者與Bitbucket或Github一起使用。

希望它有助於某人。

0

如果您已經安裝的git你的機器上,你可以打開一個git終端,只是使用Linux命令diff正常。

+0

三年半前,Tim Hutchison已經給出了這個答案(質量更好)。 – Stephan

相關問題