LoginSignup
15
19

More than 3 years have passed since last update.

PowerShellメモ 2つのファイルの差分を見る(diff)

Last updated at Posted at 2016-12-19

概要

2つのオブジェクトを比較するCompare-Objectコマンドレット(エイリアス:diff)の結果を少しだけ見やすくする関数。

使用例

例1)a.txtb.txtを比較。変更のない行も出力。
ps20.png

例2)before.csvafter.csvを比較。変更のない行は出力しない。

diffc D:\Work\before.csv Z:\Tmp\after.csv

コード

<#
.SYNOPSIS
    2つのファイルを比較

.DESCRIPTION
    修正前と修正後のファイルを比較し、差分をコンソールに表示する。
    [+]が修正後に存在する行(追加/変更)、[-]が修正後に存在しない行(削除/変更)。

.PARAMETER FromFile
    修正前ファイル

.PARAMETER ToFile
    修正後ファイル

.PARAMETER Full
    変更なしの行も表示する場合に指定。
    変更なしの行は[=]で表示。

.NOTES
    行番号は出ません

.EXAMPLE
    diffc .\File_ver1.txt .\File_ver2.txt
    File_ver1.txt と File_ver2.txt の差分を表示

.EXAMPLE
    diffc C:\Work\before.csv D:\Tmp\after.csv -Full
    before.csv と after.csv の差分を変更がない行も含めて表示
#>
function diffc([Parameter(Mandatory)][string]$FromFile, [Parameter(Mandatory)][string]$ToFile, [switch]$Full)
{
    Compare-Object (Get-Content $FromFile) (Get-Content $ToFile) -IncludeEqual:$Full | 
        ForEach-Object {
            [string]$line = ""
            [string]$foreColor = ""
            if ($_.SideIndicator -eq "=>")
            {
                # 修正後に存在する行(追加または変更された行)
                $line = "[+] " + $_.InputObject
                $foreColor = "Green"
            }
            elseif ($_.SideIndicator -eq "<=")
            {
                # 修正後に存在しない行(削除または変更された行)
                $line = "[-] " + $_.InputObject
                $foreColor = "Magenta"
            }
            elseif ($Full)
            {
                # 変更がない行
                $line = "[=] " + $_.InputObject
                $foreColor = "Gray"
            }

            Write-Host $line -ForegroundColor $foreColor
        }
}

動作確認した環境

  • PowerShell V4 (Windows 8.1)
  • PowerShell V5 (Windows 10)

参考サイト

Compare-Object - MSDN

もっといいもの

15
19
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
15
19