使用PowerShell快速测试两个文件的内容是否相同
作为更大的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" } 然而,上面的运行速度非常慢,因为它实际上
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"
}