今回のテーマは「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++
}
=== スクリプト ココマデ ==============================
内容の解説は次回をお待ちください。