PowerShell でファイル比較 (解説・補足)

2013 年最後の投稿としては少々残念な内容になりますが・・・

2013年12月24日の記事に書いたスクリプトには、一つ問題があります。

「kijun.txt」・「hikakutaishou.txt」の、いずれかないし両方のテキストファイルの中身が一行だけだった場合、後半の「各行比較」工程において意図しない動作をしてしまうのです。

 

 

この問題を引き起こすのは、 ” (Get-Content テキストファイル名)[行] ” の部分です。

解説・後半 2/2 に書いた通り、この部分はテキストファイルの [$LN] 行目の文字列を抜き出すことが目的です。

しかし、一行しか無いテキストファイルに対してこれを行うと、[$LN] 文字目の一文字だけを抜き出してしまうのです。

これでは、両テキストファイルの内容が一致しているか否かを、正確に判定出来ません。

 

 

一行だけのテキストファイルに対し、その一行の文字列(つまりそのテキストファイル全体)を抜き出す場合は、対象行を指定する ” [ ] ” が不要となります。

適宜スクリプトを書き換えてご利用ください。

if 構文を使って、「$NoK」と「$NoH」のいずれかないし両方が「 1 」だった場合の条件分岐を行えばよいのですが、複雑になりそうなので止めておきます。

 

 

なお、このスクリプトが「PowerShell 2.0 以降」でしか動かないのは、配列演算子 ” -join ” が PowerShell 1.0 には無いためです。

” -join ” を使わない形に書き換えれば、Windows Vista Enterprise ( Service Pack 2 ) の PowerShell 1.0 でも実行可能であることを確認済みです。

 

 

それでは私は年越し蕎麦を食べに行ってきます。

皆様も良いお年をお迎えください。