Powershellでファイルの差分を確認してみました。
Powershellでファイルの差分を確認する
Compare-Object を利用することで差分の確認ができます。
Compare-Object -ReferenceObject @(Get-Content -Path <比較元ファイルのパス>) `
-DifferenceObject @(Get-Content -Path <比較先ファイルのパス>)
実際に試してみる
実際にファイルを比較してみます。
比較元、比較先ファイルの準備
以下の2ファイルを作成します。
5行目に差分を作っておきます。
a
b
c
d
e
f
g
a
b
c
d
d
f
g
比較する
比較してみます。
$path_01 = "C:\fileA.txt"
$path_02 = "C:\fileB.txt"
Compare-Object -ReferenceObject @(Get-Content -Path $path_01) `
-DifferenceObject @(Get-Content -Path $path_02)
結果
PS C:\> $path_01 = "C:\fileA.txt"
PS C:\> $path_02 = "C:\fileB.txt"
PS C:\>
PS C:\> Compare-Object -ReferenceObject @(Get-Content -Path $path_01) `
>> -DifferenceObject @(Get-Content -Path $path_02)
InputObject SideIndicator
----------- -------------
d =>
e <=
PS C:\>
InputObject と SideIndicator で結果が表示され、それぞれのファイルで差分がある行を示しています。
今回だと5行目で比較元のfileAは d ではなく e なので、右方向に対して d が異なる箇所として表示されています。
逆に、fileBは e ではなく d なので、左方向に対して e が異なる箇所として表示されています。
注意点
行単位でしか見れないので1行の中の差分は確認が難しい
上記の結果でもわかりますが、行単位でしか確認できないので行の中のどの部分が変更となっているかは出力の中から確認する必要があります。
その行に差分があることは確かなのですが、パラメータなどが複雑で長い場合には探すのが手間になります。
複数行差分があると結果が非常に見づらい
それぞれのファイルに複数差分があると結果が非常に見づらくなります。
上記のfileAとfileBに文字を追加して差分を複数出してみましたが、行番号も分かりませんし、それぞれ対応する箇所もぱっと見では分からないので、解読するの難しくなります。
PS C:\> Compare-Object -ReferenceObject @(Get-Content -Path $path_01) `
>> -DifferenceObject @(Get-Content -Path $path_02)
InputObject SideIndicator
----------- -------------
a =>
c =>
daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanashamraoiranabnansgasfajfaa =>
ga =>
ajdr <=
cas <=
eaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaangahntianjnfafewapashn bhuerhaiushra <=
g <=
PS C:\>