Linuxなら迷うこと無く
diff
コマンドがあるので問題ないが、Windowsの場合どうすれば良いか悩んでしまうことがある。フリーソフトがインストールできる環境ならまだしも、インターネットに繋がないサーバーとなると、OS標準のコマンドで実施する必要があるので調べてみた。Windowsバッチファイル
実はコマンドがあってfc
(File Compare) を使えば良い。オプションを確認してみよう。C:\>fc /?
2 つのファイルまたはファイル セットを比較し、相違点を表示します。
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]
[ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2
FC /B [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2
/A 相違する各部分の 1 行目と最後の行だけを表示します。
/B バイナリの比較を実行します。
/C 英字の大文字と小文字を区別しません。
/L ファイルを ASCII テキストとして比較します。
/LBn 連続する最大不一致行を指定行数に設定します。
/N ASCII の比較で行番号を表示します。
/OFF[LINE] オフライン属性が設定されたファイルをスキップしません。
/T タブをスペースに変換しません。
/U Unicode テキスト ファイルとしてファイルを比較します。
/W 連続した空白 (タブとスペース) を 1 つのスペースに圧縮して比較
します。
/nnnn 不一致発見後に確認する、一致すべき連続行数を指定します。
[ドライブ1:][パス1]ファイル名1
比較する最初のファイルまたはファイル セットを指定します。
[ドライブ2:][パス2]ファイル名2
比較する 2 番目のファイルまたはファイル セットを指定します。
見ての通りいろいろオプションはあるが、お勧めは/n
付けて相違行番号を出すと比較結果が確認しやすい。(実行例)
c:\>fc /n test.txt test2.txt
ファイル test.txt と TEST2.TXT を比較しています
***** test.txt
***** TEST2.TXT
5:
6: hoge4
*****
PowerShell
Compare-Object
を使う。さらに標準でdiff
とcompare
でエイリアスに登録されているので、以下コマンドで実行することができる。PowerShell的にはあくまでオブジェクトの比較になるので、一度
cat
(Get-Content
のエイリアス) でテキストを読み込ませてから比較する必要がある。SideIndicator
は=>
となっていれば引数の右側、<=
になっていれば引数の左側に差異があることを表している。PS C:\> diff (cat '.\test.txt') (cat .\test2.txt)
InputObject SideIndicator
----------- -------------
=>
hoge4 =>