毎回似たようなスクリプトを書いている気がするので、
暇なうちにいくつかWeb上に上げておこうと思いました。
今回はバックアップ元と先のテキストを比較するスクリプト。
# 比較結果の格納先
$ResultFile = "C:\temp\CompareResult.txt"
# 比較元ディレクトリー
$ReferenceTarget = "C:\temp\data"
# 比較先ディレクトリー(バックアップ)
$DifferenceTarget = "C:\temp\data_backup"
# 比較元ディレクトリーからファイルごとに処理実施
Get-ChildItem -Recurse -File $ReferenceTarget | ForEach-Object {
# 比較元ファイル名取得(フルパス)
$ReferenceFile = $_.FullName
# 比較先ファイル名取得(フルパス)
$DifferenceFile = $_.FullName.replace($ReferenceTarget , $DifferenceTarget)
# 比較先ファイルの存在確認
if(Test-Path $DifferenceFile) {
# DifferenceFileが存在する場合、両方のデータサイズを取得
# (後段処理でCompare-Objectを0バイトファイルに仕掛けると叱られるのでやった)
$ReferenceFileSize = (Get-ChildItem $ReferenceFile).Length
$DifferenceFileSize = (Get-ChildItem $DifferenceFile).Length
$CompareResult = ""
if($ReferenceFileSize -ne "0") {
if($DifferenceFileSize -ne "0") {
# 比較元先の両ファイルサイズが0ではない場合、Compare-Objectして結果を取得する
$CompareResult = Compare-Object -ReferenceObject (Get-Content $ReferenceFile) `
-DifferenceObject(Get-Content $DifferenceFile) | Format-Table * -AutoSize
if($CompareResult) {
# Compare-Objectの結果に1行以上データがある場合
$ReferenceFile + " : " + $DifferenceFile + " : NG" >> $ResultFile
$CompareResult >> $ResultFile
} else {
# Compare-Objectの結果に1行もデータが無い場合(ファイルが同一だった場合)
$ReferenceFile + " : " + $DifferenceFile + " : OK" >> $ResultFile
}
} else {
# DifferenceFileが0バイトで、ReferenceFileが0バイトではない場合
$ReferenceFile + " : " + $DifferenceFile + " : NG" >> $ResultFile
$ReferenceFile + " = " >> $ResultFile
Get-Content $ReferenceFile >> $ResultFile
}
} else {
if($DifferenceFileSize -ne "0") {
# ReferenceFileが0バイトで、DifferenceFileが0バイトではない場合
$ReferenceFile + " : " + $DifferenceFile + " : NG" >> $ResultFile
$DifferenceFile + " = " >> $ResultFile
Get-Content $DifferenceFile >> $ResultFile
} else {
# 比較元先の両ファイルサイズが0の場合
$ReferenceFile + " : " + $DifferenceFile + " : OK" >> $ResultFile
}
}
} else {
# DifferenceFileが存在しない場合
$ReferenceFile + " : NG(新規ファイル)" >> $ResultFile
}
}