1

fc.exe我尝试使用with 选项逐字节比较两个文件/b进行二进制比较。

当我从命令提示符窗口中运行命令时,输出列出了二进制差异。

例如命令:

C:\Work\jan21\script>fc.exe /b C:\abc\2.0\common.c C:\Users\rakeshk\Desktop\download_break\final\common.c >b.txt

结果b.txt包含:

Comparing files C:\ABC\2.0\common.c and C:\USERS\RAKESHK\DESKTOP\DOWNLOAD_BREAK\FINAL\COMMON.C
00000994: 20 09
00000995: 20 69
00000996: 49 6E
00000997: 4E 74
00000998: 20 0D
00000999: 20 0A
0000099A: 55 20
...

最后FC打印:

C:\USERS\RAKESHK\DESKTOP\DOWNLOAD_BREAK\FINAL\COMMON.C longer than C:\ABC\2.0\common.c

但是当我在批处理文件中运行时,例如这个命令行

fc.exe /b !FILE1! !FILE2!>c.txt

该文件c.txt包含

Comparing files C:\USERS\RAKESHK\DESKTOP\DOWNLOAD_BREAK\FINAL\COMMON.C longer than C:\ABC\2.0\common.c
FC: no differences encountered

为什么FC打印文件内容不同却没有区别?

4

1 回答 1

2

我创建了两个文件:

x.txt (7 字节)

abcdefg

y.txt(16 字节)

abcdefg
hijklmn

比较 using/b时,它没有报告任何差异,因为该/b选项逐字节显示差异。一旦到达较小文件的末尾,它就会停止比较。在这个测试中,它只比较了前 7 个字节,然后它报告 y.txt 比 x.txt 长。

我猜您的两个文件与较小文件的末尾相同,这就是它没有报告任何差异的原因。在我的测试用例中,它没有报告no differences encountered. 也许那是因为您在不同的操作系统上运行,并且您可能在FC.EXE...中发现了一个错误。我正在使用 WinSvr2008R2。从 DOS运行ver报告Microsoft Windows [Version 6.1.7601]给我。文件详细信息FC是:

07/13/2009  06:14 PM            19,968 fc.exe

如果我通过 Windows 资源管理器查看详细信息,我会看到:

File Description  -  DOS 5 File Compare Utility
File Version      -  6.1.7600.16385

.

编辑 2013 年 1 月 28 日

由于您正在进行二进制比较,只是为了查看文件是否不同,您可以在不生成大型二进制差异文件的情况下进行比较。如果您下载 Microsoft File Checksum Integrity Verifier并确保fciv.exe它位于您的路径中,那么您可以编写以下批处理文件来确定两个文件是相同还是不同。

@echo off

setlocal ENABLEDELAYEDEXPANSION

for /f "skip=3 delims= " %%i in ('fciv -md5 %1') do set md5_1=%%i
for /f "skip=3 delims= " %%i in ('fciv -md5 %2') do set md5_2=%%i

if "!md5_1!"=="!md5_2!" (echo Files are the same) else (echo Files are different)

set md5_1=
set md5_2=

endlocal
于 2013-01-24T06:20:02.830 回答