我有两个文本文件,想使用 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 模拟器。