Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PowerShell快速测试两个文件的内容是否相同_Powershell - Fatal编程技术网

使用PowerShell快速测试两个文件的内容是否相同

使用PowerShell快速测试两个文件的内容是否相同,powershell,Powershell,作为更大的PowerShell脚本的一部分,我想测试两个二进制文件的内容是否相同 我认为以下逻辑上是正确的: if (@(Compare-Object $(Get-Content f1.txt -encoding byte) $(Get-Content f2.txt -encoding byte) -sync 0).length -eq 0) { "same" } else { "different" } 然而,上面的运行速度非常慢,因为它实际上

作为更大的PowerShell脚本的一部分,我想测试两个二进制文件的内容是否相同

我认为以下逻辑上是正确的:

if (@(Compare-Object 
    $(Get-Content f1.txt -encoding byte) 
    $(Get-Content f2.txt -encoding byte) 
    -sync 0).length -eq 0) {
    "same" 
} else {
    "different"
}
然而,上面的运行速度非常慢,因为它实际上是在使用Compare对象来实现一个更简单的实现

我正在寻找能够给出相同逻辑结果,但使用更快的低级文件比较的东西


我不需要或不想要任何差异的描述,也不需要任何文本输出,只需要一个逻辑测试就可以得到一个布尔结果。

如果文件很大,导致比较对象花费了很多时间,您可以生成SHA1哈希并对其进行比较


或者您可以在循环中逐字节读取文件,在第一个不相等的字节处中断。

您可以使用它来计算哈希值。我也建议您计算哈希值。PSCX模块有一个hash cmdlet。@Tom是的,我们可以使用PSCX cmdlet或.Net库或外部exe来实现这一点,不缺少工具……哈希值将是您的第一步。如果它们是相同的,那么需要对它们进行二进制比较以确定。请尝试
cmd/c fc/?
。。。使用Get-FileHash cmdlet,我同意哈希解决方案很简单。然而,由于逐字节比较肯定会更快,很遗憾没有一种简洁的编码方式。似乎必须是C#循环,在第一个差异上有一个中断,才能获得合理的性能。get-Content cmdlet使用参数-ReadCount 0在处理大文件时运行得更快
if ($(Get-FileHash $fileA).Hash -ne $(Get-FileHash $fileB).Hash) {
  Write-Output "Files $fileA and $fileB aren't equal"
}