如何在 Windows Powershell 中比较两个文本文件的差异?

如何在 Windows Powershell 中比较两个文本文件的差异?

我有两个文本文件,想使用 Windows Powershell 查找它们之间的差异。有没有类似于 Unix diff 工具的工具?或者还有其他我没考虑过的方法?

我已经尝试过compare-object,但得到了这个神秘的输出:

PS C:\> compare-object one.txt two.txt

InputObject                                                 SideIndicator
-----------                                                 -------------
two.txt                                                     =>
one.txt                                                     <=

答案1

我自己想通了。由于 Powershell 使用的是 .net 对象而不是文本,因此您需要使用 get-content 来公开文本文件的内容。因此,要执行我在问题中尝试执行的操作,请使用:

compare-object (get-content one.txt) (get-content two.txt)

答案2

一个更简单的方法是这么写:

diff (cat file1) (cat file2)

答案3

或者您可以像这样使用 DOSfc命令(这将显示两个文件的输出,因此您必须扫描差异):

fc.exe filea.txt fileb.txt > diff.txt

fc是 Format-Custom cmdlet 的别名,因此请确保输入命令为fc.exe。请注意,许多 DOS 实用程序不处理 UTF-8 编码。

您还可以生成一个 CMD 进程并fc在其中运行。

start cmd "/c  ""fc filea.txt fileb.txt >diff.txt"""

这指示 PowerShell 使用引号中的参数通过“cmd”程序启动进程。引号中的“/c”cmd 选项用于运行命令并终止。进程中 cmd 运行的实际命令是fc filea.txt fileb.txt将输出重定向到文件diff.txt

fc.exe您可以在 powershell 中 使用 DOS 。

答案4

如果您希望 compare-object(又名 diff 别名)的行为类似于 unix diff,那么它就太糟糕了。我尝试了 diff (gc file1) (gc file2),如果一行太长,我就看不到实际的 diff,更重要的是,我无法分辨 diff 在哪个行号上。

当我尝试添加 -passthru 时,我现在可以看到差异,但是我不知道差异在哪个文件中,而且我仍然没有得到行号。

我的建议是,不要使用 powershell 来查找文件中的差异。正如其他人指出的那样,fc 可以工作,而且比 compare-object 更好一些,甚至更好的是下载并使用真正的工具,例如 Mikeage 提到的 unix 模拟器。

相关内容