PowerShell でファイル比較 (解説・後半 1/2)

引き続き、スクリプト後半の「各行比較」、つまり両テキストファイルの中身を一行ずつ突き合わせて一致 or 不一致を判定する工程について解説します。

 

 

後半のスクリプトは、全体が While 構文によって構成されています。

While 構文は何らかの処理を繰り返し実行させたい場合に便利で、CSV 形式で記述された一覧表を元にドメインユーザーを作成する際にも利用しました。

 

 

まずは全体の流れから説明します。

PowerShell において先頭の行は「ゼロ」行目として扱われるため、一致/不一致を判定する処理も、最初は「ゼロ」行目を対象にしてスタートします。

そしてその行についての確認が完了したら、次はその「+1」行目に対して同じ処理を行います。

その繰り返しを、基準となるテキストファイル「kijun.txt」の最後の行まで繰り返します。

 

 

こういった処理を、While 構文で記述すると以下のようになります。

まず最初の " $LN = 0 " により、処理対象の行を示す「変数 $LN 」に、数値「ゼロ」を格納します。

お次は条件定義です。" while ($LN -le $NoK-1) " は、行の値が「 $NoK-1 」以下であれば処理を続行し、超えたら終了することを意味します。

変数 $NoK 自体は、基準となる「kijun.txt」の全行数を示す変数として前半で定義済みですが、一行目が「ゼロ」としてスタートするため、最終行は「全行数 -1」となります。

-1 が無いと、一回余計に処理が行われてしまうので注意が必要です。

※ 比較演算子として " -le " (以下) ではなく " -lt " (未満) を用い、 " while ($LN -lt $NoK) " と記述しても同じことです。

この条件定義に続く、{ } で括られた部分に、実際に繰り返したい処理が記述されています。

その最後にある " $LN++ " は、変数 $LN に格納された数値に +1 するための記述です。

これにより、次回は「次の行」に対して同様の処理が行われる事となります。

" $LN++ " より前の部分こそが、このスクリプトのキモとなる「判定処理」なのですが、この部分についてはまた次回詳述します。

 

 

後半 2/2 へ続く。