全部,有一个生成它的导出转储的应用程序。我需要编写一个脚本,将前几天的转储与最近的转储进行比较,如果它们之间有差异,我必须对移动和删除某种东西进行一些基本的操作。我想找到一种合适的方法,而我尝试的方法是:
$var_com=diff (get-content D:\local\prodexport2 -encoding Byte) (get-content D:\local\prodexport2 -encoding Byte)
我也尝试了Compare-Object cmdlet。我注意到内存使用率很高,System.OutOfMemoryException
几分钟后最终收到一条消息。你们中的一个做过类似的事情吗?请一些想法。有一个提到有比较的线程,我不知道该怎么做。在此先感谢伙计Osp
另一种方法是比较文件的MD5哈希值:
$Filepath1 = 'c:\testfiles\testfile.txt'
$Filepath2 = 'c:\testfiles\testfile1.txt'
$hashes =
foreach ($Filepath in $Filepath1,$Filepath2)
{
$MD5 = [Security.Cryptography.HashAlgorithm]::Create( "MD5" )
$stream = ([IO.StreamReader]"$Filepath").BaseStream
-join ($MD5.ComputeHash($stream) |
ForEach { "{0:x2}" -f $_ })
$stream.Close()
}
if ($hashes[0] -eq $hashes[1])
{'Files Match'}
谢谢你 它花费了很长时间进行比较。
我尝试将这段代码与相对路径一起使用(因此在Powershell中
cd somewhere
,然后在中$FilePath1 = 'testfile.txt'
),但StreamReader不会拾取Powershell的文件夹更改,而是认为它与我的主文件夹有关。解决方法是使用$Filepath1 = Get-Item 'testfile.txt'
替代方法,然后Powershell将正确的绝对路径传递给StreamReader。Powershell的Get-FileHash函数(现在)可用,并且更简单地完成相同的操作。