LoginSignup
0
1

More than 5 years have passed since last update.

バックアップ元と先のテキストを比較するPowerShellスクリプト

Posted at

毎回似たようなスクリプトを書いている気がするので、
暇なうちにいくつか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
    }

}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1