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\*
将比较文件夹 path1
和 path2
中的所有文件,前提是它们(文件)具有相同的名称。如果存在名称不匹配的文件, 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
是一个更好的选项。如果您经常需要使用FORFILES
和FC
,可能会成为一个非常好的文件比较实用程序。
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 等效项是啥? [关闭]