fc 是 File Compare(文件比较)的缩写,它是一个非常实用的命令行工具,用于比较两个文件或两个文件集的差异,并以易于阅读的格式显示出来。

fc 命令可以:
- 比较文本文件:这是最常见的用法,它会逐行比较两个文本文件,并显示它们之间的不同之处。
- 比较二进制文件:虽然主要用于文本,但它也可以比较二进制文件,但输出结果会非常简略,只报告文件是否相同。
- 比较文件集:可以使用通配符( 和 )来比较两个目录下的多对文件。
语法
fc 命令的基本语法如下:
fc [/a] [/c] [/l] [/lb<n>] [/n] [/off[line]] [/t] [/u] [/w] [<drive1>:][<path1>]<filename1> [<drive2>:][<path2>]<filename2>
或者用于比较目录:
fc [/a] [/c] [/l] [/lb<n>] [/n] [/off[line]] [/t] [/u] [/w] /d [<drive1>:][<path1>] [<drive2>:][<path2>] fc [/a] [/c] [/l] [/lb<n>] [/n] [/off[line]] [/t] [/u] [/w] /c [<drive1>:][<path1>] [<drive2>:][<path2>]
常用参数详解
下面是 fc 命令中最常用和最重要的参数:

| 参数 | 全称 | 说明 |
|---|---|---|
/a |
Abbreviated | 压缩 ASCII 模式,只显示有差异的行,并跳过多余的空白行,使输出更紧凑。 |
/c |
Case Insensitive | 忽略大小写,在比较时,将所有字母视为大小写相同。Hello 和 hello 会被视为相同。 |
/l |
Long Lines | 长行模式,这是默认模式,适用于大多数文本文件,它会逐行比较,行长度不受限制。 |
/lb<n> |
Line Buffer Size | 设置内部行缓冲区的大小。<n> 是一个数字,范围从 100 到 10000,默认值是 100,如果文件包含非常长的行,可能需要增加此值以避免错误。 |
/n |
Line Numbers | 显示行号,在输出差异时,在每一行前面加上其在文件中的行号,方便定位。 |
/off[line] |
Offline | 不要跳过具有“脱机”属性的文件。 |
/t |
Tabs | 不将制表符转换为空格,默认情况下,fc 会将制表符视为等效的空格进行比对,此参数可以禁用该行为。 |
/u |
Unicode | 以 Unicode 模式比较文件。 |
/w |
Compress Whitespaces | 压缩空白,在比较时,将一个或多个连续的空格或制表符视为一个空格,这有助于忽略格式差异,专注于内容。 |
/d |
Directories | 比较两个目录中的文件,它会按文件名比较两个目录下所有同名文件。 |
/c |
Case Sensitive | 区分大小写,这是默认行为,在比较文件集时使用。 |
/n |
Numeric | 按数字顺序比较文件,在比较文件集时使用。 |
使用示例
假设我们有以下两个文本文件 file1.txt 和 file2.txt。
file1.txt
Hello World.
This is the first file.
Line 3 is here.
The end.
file2.txt
Hello World.
This is the second file.
Line 3 is here.
The end is near.
示例 1:基本比较(默认模式)
直接比较两个文件,fc 会使用默认的长行模式。

fc file1.txt file2.txt
输出解释:
----- file1.txt
----- file2.txt
***** file1.txt
This is the first file.
***** file2.txt
This is the second file.
***** file1.txt
The end.
***** file2.txt
The end is near.
----- filename:表示接下来显示的是该文件的内容。***** filename:表示接下来显示的是该文件中与另一个文件不同的行。
示例 2:使用 /n 参数显示行号
这能让你更快地找到问题所在。
fc /n file1.txt file2.txt
输出:
***** file1.txt
00002: This is the first file.
***** file2.txt
00002: This is the second file.
***** file1.txt
00004: The end.
***** file2.txt
00004: The end is near.
(注:第一行 "Hello World." 相同,所以没有显示)
示例 3:使用 /c 参数忽略大小写
假设 file1.txt 中有 Apple,file2.txt 中有 apple。
fc /c file1.txt file2.txt
这样 Apple 和 apple 会被视为相同,不会标记为差异。
示例 4:使用 /w 参数压缩空白
假设 file1.txt 中有 word1 word2,file2.txt 中有 word1 word2(多个空格)。
fc /w file1.txt file2.txt
这两行会被视为相同,因为 /w 参数将连续的空格压缩成了一个。
示例 5:比较两个目录下的所有文件
假设你有两个目录 dir1 和 dir2,里面都有 config.ini 和 data.txt 文件。
fc /d dir1 dir2
这个命令会依次比较 dir1\config.ini 和 dir2\config.ini,然后比较 dir1\data.txt 和 dir2\data.txt,并报告每一对文件的差异。
退出代码
fc 命令执行后会返回一个退出代码,可以在批处理脚本中通过 %errorlevel% 变量获取。
| 退出代码 | 含义 |
|---|---|
| 0 | 比较的文件完全相同。 |
| 1 | 比较的文件有差异。 |
| 2 | 出现了错误,找不到文件、参数无效等。 |
批处理脚本示例:
@echo off
fc /n file1.txt file2.txt > nul
if %errorlevel% equ 0 (
echo 文件内容完全相同。
) else if %errorlevel% equ 1 (
echo 文件内容有差异。
) else (
echo 比较过程中发生错误。
)
与 comp 和 diff 的区别
-
fcvscomp:fc(File Compare) 是一个更强大、功能更丰富的工具,专为 Windows 设计,提供详细的、可读的文本差异报告。comp(Compare) 是一个更古老的工具,主要用于比较二进制文件,其文本比较功能非常有限且输出不友好,在现代 Windows 中,fc几乎总是更好的选择。
-
fcvsdiff:fc是 Windows 原生的命令。diff是源自 Unix/Linux 世界的标准工具,在通过 Git Bash、WSL 等环境使用时非常常见。diff的输出格式(如 "unified diff" 或 "context diff")在开发者社区中更为标准化,常用于版本控制系统(如 Git)。- 如果你习惯于 Linux 环境,或者需要将输出直接用于某些开发工具,
diff可能更方便,如果你只想在 Windows 命令行下快速比较两个文件,fc就足够了。
fc 是 Windows 系统管理员和高级用户一个非常得力的助手,无论是检查配置文件的修改、对比日志文件,还是在脚本中实现文件校验,fc 都能高效地完成任务。/n(显示行号)和 /c(忽略大小写)这两个最常用的参数,就能解决大部分日常问题。
