我知道有一篇类似的文章:这里。
我尝试使用它提到的comp
命令,但是如果我有两个文件,一个数据为“abcd”,另一个数据为“abcde”,它只会说文件大小不同。我想知道它们具体在哪里不同。在Unix中,简单的diff
命令告诉我它们不同的行和列,在Windows中的comp
命令适用于像“abd”和“abc”这样的文件,而其他情况则不适用。请问我可以用什么方法解决这个问题?
在CMD shell或批处理文件中运行此命令:
FC file1 file2
FC
也可以用于比较二进制文件:
FC /B file1 file2
diffutils
。请参见https://cygwin.com/cgi-bin2/package-cat.cgi?file=x86_64%2Fdiffutils%2Fdiffutils-3.3-2&grep=diff - Steve Pitchers另一种选择是在这里下载并安装Git。然后您有两个选择:
使用Git Bash(从上面安装)中的diff,并像在Windows上使用本地*nix用户一样愉快地进行差异比较。
将Git\bin\
路径添加到您的PATH
变量中。 这不仅会给您提供diff,还会提供许多其他可以从Windows命令行使用的Linux命令。
您可以通过右键单击计算机并选择属性来设置PATH
变量。 然后,您可以在屏幕左侧单击高级系统设置。 在弹出窗口中,单击环境变量,然后使用Git\bin\
在用户变量中添加或更新PATH变量。
git...
可执行文件。此外,答案可能应该包括一个重要的信息:你需要通过编写“git diff”而不是“diff”来启动diff工具。 - Petr BodnárWinmerge有一个命令行工具,值得一试。
此外,你也可以根据需要使用其图形界面部分。
在我的情况下,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。
还有PowerShell(它是Windows的一部分)。 它不是很快,但很灵活,这是基本命令。 如果需要更好的格式化,人们已经为其编写了各种cmdlet和脚本。
PS C:\Users\Troll> Compare-Object (gc $file1) (gc $file2)
虽然不是 Windows 的一部分,但如果您是拥有 Visual Studio 的开发人员,它会带有 WinDiff(图形化界面)。
但我个人最喜欢的是 BeyondCompare,它需要花费30美元。
fc。fc 比 Cygwin 的 diff 更适合处理大文件(> 4 GBytes)。
如果您使用 COMP 工具时出现错误,那么很可能是因为该工具默认假定您要比较的文件大小相同。为了解决这个问题,您可以使用 '/n'
选项来指定要比较的行数。您可以在命令行中键入 'comp /?'
来查看 COMP 支持的选项。
因此,您的命令应该如下所示:
C:\>comp "filepath1" "filepath2" /a /l /n=(the number of lines you want to compare) /c
C:\>fc /c(case insensistive) /lbn(number of errors allowed before you wanna stop compare) /n(display line number) "filename1" "filename2"
有很多选项可供选择,您可以通过'fc /?'
查看。
DiffUtils可能是你最好的选择。它是diff在Windows下的等价物。
据我所知,没有内置的等价物。
我找到了一款轻量级的图形化软件,适用于Windows系统,在缺少diff
命令时非常有用。它可以解决我所有的问题。
FC path1\* FC path2\*
会比较路径path1
和path2
中所有文件,前提是这些文件的名称完全相同。如果有文件名称不匹配,FC 将报告缺少的文件,但仅对于第一个文件夹中在第二个文件夹中找不到的文件,而不是反过来的情况。为了捕捉所有不匹配的文件,可能需要使用不同的技术。 - Andriy MFC ...your params... >filename
),然后使用例如记事本(任何纯文本编辑器都可以)打开它。(3) 你可以将输出管道传输到MORE
(FC ...your params... | MORE
),然后逐页或逐行查看输出。你也可以尝试将此作为问题提交(不确定这里是否合适,也许[su]更合适),看看是否有更好的替代方案。 - Andriy M