diff 命令的 Windows 等效项是啥?

Posted

技术标签:

【中文标题】diff 命令的 Windows 等效项是啥?【英文标题】:What is the Windows equivalent of the diff command?diff 命令的 Windows 等效项是什么? 【发布时间】:2011-10-16 04:12:02 【问题描述】:

我知道有一个类似这样的帖子:here. 我尝试使用上面提到的comp 命令,但是如果我有两个文件,一个带有“abcd”之类的数据,另一个带有“abcde”之类的数据,它只是说文件的大小不同。我想知道它们到底在哪里不同。在 Unix 中,简单的 diff 告诉我哪一行和哪一列,如果我有“abd”和“abc”之类的东西,windows 中的 comp 命令可以工作。不然。有什么想法可以用来做这个吗?

【问题讨论】:

【参考方案1】:

在 CMD shell 或批处理文件中运行:

FC file1 file2

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

FC /B file1 file2

【讨论】:

如何处理两个文件夹中所有已更改的文件?就像,我将文件夹 1 的内容与文件夹 2 的内容进行比较:显示文件夹 2 中的任何更改行? @Wolfpack'08": FC path1\* FC path2\* 将比较文件夹 path1path2 中的所有文件,前提是它们(文件)具有相同的名称。如果存在名称不匹配的文件, FC 会报告丢失的文件,但仅针对在第二个文件夹中未找到的第一个文件夹的文件,而不是相反。要捕获所有不匹配,可能需要使用不同的技术。 @AndriyM 那么,新文件会导致 FC 出错而不返回任何实际行吗?只有错误信息? @Wolfpack'08:是的,只是关于丢失对应方的消息,没有来自现有方的信息。 (但这不会终止对其他现有文件对的处理,并且它们的比较仍将执行,如果这是您所要求的。) @AndriyM 所以,你的意思是说:“如果错误:files in both directories are diff'd; files in only one directory throw errors.”很有趣。但肯定有一个相当于 diff 的 3rd-party 程序吗?【参考方案2】:

嗯,在 Windows 上,我很乐意运行 diff 和许多其他 GNU 工具。您可以使用cygwin 来完成,但我个人更喜欢GnuWin32,因为它的安装体验要轻松得多。

所以,我的回答是 diff 的 Windows 等价物就是 diff 本身!

【讨论】:

Cygwin 的基本安装似乎不包括差异。我需要安装哪些额外的软件包才能获得它? 我不推荐cygwin。我会使用 diff 的本机 Win32 端口 @WarrenDew 您需要的 Cygwin 软件包是 diffutils。见cygwin.com/cgi-bin2/… 现在有了适用于 Linux 的 Windows 子系统(WSL,又名适用于 Windows 的 Bash),如果在 Windows 10 上,获取和使用 diff 变得更加容易【参考方案3】:

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

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

【讨论】:

虽然这不是一个内置的 Windows 实用程序,但我强烈推荐它 - 它是开源的、轻量级的,并且在我的经验中没有错误。【参考方案4】:

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

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

Git diff documentation

【讨论】:

@firelight - 谢谢你的回答。您能否详细说明您的意思:“然后,将 Git\bin\ 的路径添加到您的 PATH 变量中。” @BKSpureon - 如果您右键单击计算机并选择属性,那么您可以单击屏幕左侧的高级系统设置。在弹出窗口中,单击环境变量,然后使用 Git\bin\ 在用户变量中添加或更新 PATH 变量 @JustinCormack 你有这方面的参考吗?我刚刚在 Git Bash 中尝试了 diff 并且成功了 @Tim Hutchison,来自您的回答:“这不仅会为您提供差异,还会为您提供许多其他可以从 Windows 命令行使用的 linux 命令。” - 你是指哪些?当一个人安装 Git 时,他/她应该只有 PATH 中可用的 git... 可执行文件。此外,答案可能应该包含一条重要信息:您需要通过编写git diff 来启动差异工具,而不仅仅是diff 老兄,这完全是另一个diff【参考方案5】:

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

【讨论】:

/A 仅更改的块的第一行和最后一行 /N 显示行号【参考方案6】:

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

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

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

DiffUtils 可能是您最好的选择。它是 Windows 的 diff 等价物。

据我所知,没有内置的等价物。

【讨论】:

我也使用过它,但是,今天我发现该页面上提供的相当旧的 2.8.7 版本有一个错误(在比较某些 PDF 文件时,它们被报告为相等)。所以现在更喜欢firelight建议的“git diff”。【参考方案9】:

您收到 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 就是这样用在 ref 上的:

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

您可以通过'fc /?' 看到许多可用选项 希望这会有所帮助

【讨论】:

【参考方案10】:

我发现了一个轻量级的 Windows 图形软件,它似乎在缺少 diff 命令时很有用。它可以解决我所有的问题。

WinDiff http://www.grigsoft.com/download-windiff.htm

【讨论】:

谢谢!在它实际显示详细差异之前,我必须单击概览中的文件名。它显示统一视图,不提供两个比较文件的并排视图。这使得很难关联哪个版本在哪个文件中。【参考方案11】:

相当于 diff 命令的窗口是 fc (File Comapre) 命令。

以下是执行此操作的基本步骤: 1. 将这两个文件保存在一个文件夹中(例如 file1.html 和 file2.html) 2. 启动命令提示符 3. 输入 fc file1Location file2Location

找到了同样的详细教程:

http://www.howtogeek.com/206123/how-to-use-fc-file-compare-from-the-windows-command-prompt/

【讨论】:

【参考方案12】:

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

但根据我的需要,我想跟踪项目文件更改和日志的最佳工具是 GIT。如果您在团队中工作,您可以在自己的服务器上在线创建一些 repo,或者将其与 Bitbucket 或 Github 一起使用。

希望它对某人有所帮助。

【讨论】:

【参考方案13】:

如果你已经在你的机器上安装了 git,你可以打开一个 git 终端,然后像往常一样使用 Linux diff 命令。

【讨论】:

以上是关于diff 命令的 Windows 等效项是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Linux Shell 中的 ` +` 的 Windows 等效项是啥?

en_US.UTF-8 语言环境的 Windows 等效项是啥?

Perl 的 require 命令的 java 等效项是啥? [关闭]

Excel IFERROR 的 R 等效项是啥?

Excel 的 NORMSDIST 函数的 MATLAB 等效项是啥?

case/switch 语句的 Python 等效项是啥? [复制]