PowerShell でファイル比較

今回のテーマは「2 つのテキストファイルの中身を比較し、一致するかどうか確認する」というものです。

PowerShell にはそのような用途のための Compare-Object というコマンドレットもあるのですが、実行結果の表記にクセがあり、私の求めるものではなかったので自分でスクリプトを書きました。

2 つのテキストファイルに対し、一行目から順番に「文字列が完全一致するか否か」を確認し、各行毎に「True ( 一致する )」ないし「False ( 一致しない )」という結果を出力するスクリプトです。

 

 

まず、E ドライブ直下に基準となる「kijun.txt」と、比較対象となる「hikakutaishou.txt」の 2 つのテキストファイルを作成します。

それぞれの中身は下記の通り。

------ E:¥kijun.txt ココカラ ------------------

aaaaa

bbbbb

ccccc

 

eeeee

------ ココマデ (全 5 行) -----------------------

------ E:¥hikakutaishou.txt ココカラ -------

aaaaa1

bbbbb

ccc

ddddd

------ ココマデ (全 4 行) -----------------------

 

 

2 つのテキストファイルは総行数からして違いますし、文字列が一致している行は 2 行目だけです。

そのことを実行結果 ( kekka.txt ) として得るためのスクリプトは以下の通りです。(PowerShell 2.0 以降で利用可能です。)

=== スクリプト ココカラ ==============================

"【総行数比較】" > e:¥kekka.txt

$NoK = (Get-Content e:¥kijun.txt | measure-object).count

$NoH = (Get-Content e:¥hikakutaishou.txt | measure-object).count

$NoK -eq $NoH >> e:¥kekka.txt

"基    準 : " + $NoK + " 行" >> e:¥kekka.txt

"比較対象 : " + $NoH + " 行" >> e:¥kekka.txt

"+++++++++++++++++" >> e:¥kekka.txt

"【各行比較】" >> e:¥kekka.txt

$LN = 0

while ($LN -le $NoK-1)

{

$K = (Get-Content e:¥kijun.txt)[$LN]

$H = (Get-Content e:¥hikakutaishou.txt)[$LN]

$C = $K -eq $H

$LN2 = $LN+1

$R = $LN2,$C

$R -join " : " >> e:¥kekka.txt

$LN++

}

=== スクリプト ココマデ ==============================

 

 

内容の解説は次回をお待ちください。