トップ回答者
POWERSHELLでファイル比較するには(バイナリファイル)

質問
-
Powershellで
compare-object -referenceobject $(get-content C:\WORK.DAT) -differenceobject $(get-content D:\WORK.DAT)
を実行した際に
InputObject SideIndicator
----------- -------------
... =>
... <=となります。
COMPコマンドで実行すると
COMP C:\WORK.DAT D:\WORK.DAT
OFFSET 2838F で比較エラーがあります
ファイル1 = 4
ファイル2 = 0
OFFSET 28390 で比較エラーがあります
ファイル1 = 94
ファイル2 = 7となります。
同じファイルを比較していますが、Powershellでは、違いが表示されません。
何故でしょうか?
回答
-
これでどうでしょうか
ハッシュの比較をしています。
適時改造してください。
# Compare-BinaryFile
# Input (string)FilePath1 , (string)FilePath2
# Output boolen
# FilePath1とFilePath2のファイルそれぞれのSHAハッシュを算出して比較するFunction Compare-BinaryFile{
param(
[string]$FilePath1 = ''
,[string]$FilePath2 = ''
)$SHA = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider
[Byte[]]$HashValue1 = New-Object byte[] 50
[Byte[]]$HashValue2 = New-Object byte[] 50$OpenMode = New-Object System.IO.FileMode
$OpenMode.value__ = 3 #Open
$AccessMode = New-Object System.IO.FileAccess
$AccessMode.value__ = 1 #Read$FS1 = New-Object System.IO.FileStream($FilePath1,$OpenMode,$AccessMode)
$FS2 = New-Object system.IO.FileStream($FilePath2,$OpenMode,$AccessMode)$HashValue1 = $SHA.ComputeHash($FS1)
$HashValue2 = $SHA.ComputeHash($FS2)$OpenMode = $null
$AccessMode = $null
$FS1 = $null
$FS2 = $null
$ComF = $truefor($i=0;$i -lt 50;$i++)
{
if($HashValue1[$i] -ne $HashValue2[$i]) {$ComF = $false;break}
}$HashValue1 = $null
$HashValue2 = $nullreturn $ComF
}
使い方:
Compare-BinaryFile <比較対象1ファイルパス> <比較対象2ファイルパス>
- 回答としてマーク qoo_man 2013年4月4日 5:54
-
すべての返信
-
これでどうでしょうか
ハッシュの比較をしています。
適時改造してください。
# Compare-BinaryFile
# Input (string)FilePath1 , (string)FilePath2
# Output boolen
# FilePath1とFilePath2のファイルそれぞれのSHAハッシュを算出して比較するFunction Compare-BinaryFile{
param(
[string]$FilePath1 = ''
,[string]$FilePath2 = ''
)$SHA = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider
[Byte[]]$HashValue1 = New-Object byte[] 50
[Byte[]]$HashValue2 = New-Object byte[] 50$OpenMode = New-Object System.IO.FileMode
$OpenMode.value__ = 3 #Open
$AccessMode = New-Object System.IO.FileAccess
$AccessMode.value__ = 1 #Read$FS1 = New-Object System.IO.FileStream($FilePath1,$OpenMode,$AccessMode)
$FS2 = New-Object system.IO.FileStream($FilePath2,$OpenMode,$AccessMode)$HashValue1 = $SHA.ComputeHash($FS1)
$HashValue2 = $SHA.ComputeHash($FS2)$OpenMode = $null
$AccessMode = $null
$FS1 = $null
$FS2 = $null
$ComF = $truefor($i=0;$i -lt 50;$i++)
{
if($HashValue1[$i] -ne $HashValue2[$i]) {$ComF = $false;break}
}$HashValue1 = $null
$HashValue2 = $nullreturn $ComF
}
使い方:
Compare-BinaryFile <比較対象1ファイルパス> <比較対象2ファイルパス>
- 回答としてマーク qoo_man 2013年4月4日 5:54
-