Windows与diff命令等效吗?


284

我知道有一个类似的帖子:在这里
我尝试使用comp上面提到的命令,但是如果我有两个文件,一个文件包含“ abcd”之类的数据,另一个文件包含“ abcde”之类的数据,则仅表示文件大小不同。我想知道它们到底有何不同。在Unix中,简单的diff告诉我哪一行和哪一列,如果我有“ abd”和“ abc”之类的内容,则Windows中的comp命令可以工作。并非如此。有什么想法我可以使用吗?

Answers:


461

在CMD Shell或批处理文件中运行此命令:

FC file1 file2

FC 也可以用来比较二进制文件:

FC /B file1 file2

3
如何使用两个文件夹中的所有已更改文件执行此操作?就像,我将Folder1的内容与Folder2的内容进行比较:Folder2中是否显示了任何更改的行?
Wolfpack'08 2014年

17
@ Wolfpack'08“:FC path1\* FC path2\*如果文件夹(文件)具有相同的名称,则将比较文件夹path1和中的所有文件path2。如果存在名称不匹配的文件,FC将报告丢失的文件,但仅报告第一个文件夹中的文件。 。“T在第二个文件夹,而不是倒过来发现抓住所有的不匹配,可能会需要不同的技术。
舍甫琴科中号

@AndriyM那么,新文件会导致FC错误退出而不会返回任何实际行吗?仅错误消息?
Wolfpack'08 2014年

1
@ Wolfpack'08:是的,只是有关失踪对方的消息,现有政党没有任何发言。(但是,这不会终止对其他现有文件对的处理,如果您要的话,仍然可以进行它们之间的比较。)
Andriy M 2014年

@AndriyM所以,您的意思是说:“如果出错:files in both directories are diff'd; files in only one directory throw errors.”有趣。但是肯定有一个相当于diff的第三方程序吗?
Wolfpack'08 2014年

36

好吧,我很高兴在Windows上运行diff其他许多GNU工具。您可以使用cygwin来实现,但是我个人更喜欢GnuWin32,因为它的安装体验要轻得多。

因此,我的回答是Windows等效diffdiff本身!


1
Cygwin的基本安装似乎不包含diff。我需要安装哪些其他软件包?
沃伦·露

7
我不推荐cygwin。我会使用本机的diff Win32端口
David Heffernan,2015年

1
@WarrenDew您需要的Cygwin软件包是diffutils。参见cygwin.com/cgi-bin2/…–
史蒂夫·


19

另一个选择是从此处下载并安装git 。然后,将路径添加Git\bin\PATH变量。这不仅会给您diff,还可以给您提供许多其他可从Windows命令行使用的linux命令。

您可以PATH通过右键单击“计算机”并选择“属性” 来设置变量。然后,您可以单击屏幕左侧的高级系统设置。在弹出窗口中,单击环境变量,然后使用以下命令在用户变量中添加或更新PATH变量:Git\bin\

Git diff文档


@firelight-谢谢您的回答。您能否在这里详细说明您的意思:“然后,将Git \ bin \的路径添加到PATH变量中。”
BKSpurgeon '16

2
@BKSpurgeon-如果右键单击“计算机”并选择“属性”,则可以单击屏幕左侧的“高级系统设置”。在弹出窗口中,单击环境变量,然后使用Git \ bin \在用户变量中添加或更新PATH变量
Tim Hutchison

@JustinCormack您对此有任何参考吗?我刚刚在Git Bash中尝试了diff,它起作用了
Tim Hutchison

3
@Tim Hutchison,您的回答是:“这不仅会给您diff,而且还会为您提供可从Windows命令行使用的许多其他linux命令。” -你是什么意思?当安装Git时,他/她应该只git...可以从PATH获得可执行文件。此外,答案可能应该包含一条重要信息:您需要通过编写git diff而不是来启动diff工具diff
彼得·博德纳(PetrBodnár)

花花公子,那完全是另一回事diff
vintproykt

14

在我看来,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 包含已更改的数据,即仅一行#### 09


1
/仅更改块的第一行和最后一行/ N显示行号
Lukas

10

fc。与Cygwin的diff相比,fc在处理大文件(> 4 GB)方面更好。


10

还有Powershell(它是Windows的一部分)。这不是很快,但很灵活,这是基本命令。如果您需要更好的格式,人们会为此编写各种cmdlet和脚本。

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

不是Windows的一部分,但是如果您是Visual Studio的开发人员,则它附带WinDiff(图形)

但我个人最喜欢的是BeyondCompare,售价30美元。


4

DiffUtils可能是您最好的选择。Windows相当于diff。

据我所知,没有内置的等效项。


我也使用了它,但是,今天我发现该页面上提供的相当老的版本2.8.7存在一个错误(在比较某些PDF文件时,它们被报告为相等)。因此,现在更喜欢firelight建议的“ git diff”。
2016年

4

出现COMP错误的原因是该实用程序假定您要比较的文件大小相同。为了解决这个问题,您可以使用'/n'选项,使用该选项可以指定要比较的行数。(通过'comp /?'在命令行上输入来查看comp支持的选项。因此您的命令应类似于:

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

如果您想坚持使用COMP,这应该可以解决您的问题。但这对于很大的文件将是一个问题。

虽然comp是一个选择,但我认为它是原始的,FC是更好的选择。如果经常需要,可以使用FORFILESFC一起使它成为一个非常好的文件比较实用程序。

FC以这种方式用于引用:

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

有很多可用的选项,'fc /?' 希望对您有所帮助




0

我不知道以下工具是否正是您所需要的。但是我喜欢对某些文件使用一些在线工具。这样,无论操作系统如何,我都可以使用它。这是一个示例:diffchecker.com

但是,对于我的需求,我猜想跟踪项目文件更改和日志的最佳工具是GIT。如果您在团队中工作,则可以在自己的服务器上在线存储一些仓库,或者将其与Bitbucket或Github一起使用。

希望它能帮助到别人。


0

如果您在计算机上安装了git,则可以打开git终端,然后diff像往常一样使用Linux 命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.