0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PowerShell】テキストファイルを比較する

Last updated at Posted at 2025-10-19

はじめに

Windows環境でテキストファイルを比較する時、普段はWinMergeを使って比較していますが、今回はコマンドを使って比較する方法を調べてみました。

比較するファイル

  • 以下のa.txtb.txtを比較対象とします。
a.txt
abcdefghijklmnopqrstuvwxyz
0123456789
abcdefghijklmnopqrstuvwxyz
0123456789
b.txt
abcdefghijklmnopqrstuvwxyz
0123456789
0123456789
0123456789

Compare-Objectコマンドレット

  • Compare-Objectコマンドレットを使う場合、比較するテキストファイルのパスをハッシュテーブル(連想配列)にセットする必要があります。
    • Linuxのdiffコマンドと比べると、ちょっと面倒な書き方だと感じました。
Compare-Objectの利用
$objects = @{
  ReferenceObject = (Get-Content -Path C:\Users\NKOJIMA\Desktop\test\a.txt)
  DifferenceObject = (Get-Content -Path C:\Users\NKOJIMA\Desktop\test\b.txt)
}
Compare-Object @objects
  • 実行結果は以下のよう差分だけが表示されますが、ファイルの何行目に差分があるのかは分かりません。
実行結果
InputObject                SideIndicator
-----------                -------------
0123456789                 =>
abcdefghijklmnopqrstuvwxyz <=

fcコマンド

  • fcコマンドは、コマンドプロンプトの時代から使えるコマンドとして知られています。
  • 基本的な構文はfc {比較するファイル1} {比較するファイル}で、Linuxのdiffコマンドと同じなので覚えやすいと思います。

コマンドプロンプトで実行する場合

コマンドプロンプトで実行する場合
fc C:\Users\NKOJIMA\Desktop\test\a.txt C:\Users\NKOJIMA\Desktop\test\b.txt
  • 実行結果は、差分の前後の行も出力されるのでかなり見づらいです。
実行結果
ファイル C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt と C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT を比較しています
***** C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt
0123456789
abcdefghijklmnopqrstuvwxyz
0123456789
***** C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT
0123456789
0123456789
*****

***** C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt
***** C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT
0123456789
*****
  • また、上記のオプション無しの実行結果だとファイルの何行目に差分があるのかは分かりませんが、/nパラメーターを付ければ以下のように行番号を出力できます。
実行結果(行番号を付けた場合)
ファイル C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt と C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT を比較しています
***** C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt
    2:  0123456789
    3:  abcdefghijklmnopqrstuvwxyz
    4:  0123456789
***** C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT
    2:  0123456789
    3:  0123456789
*****

***** C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt
***** C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT
    4:  0123456789
*****

PowerShellで実行する場合

  • コマンドプロンプトでの実行時と同様にfcと指定するだけだと、「{ファイル名}を受け入れる位置指定パラメーターが見つかりません」というエラーが発生します。
PowerShellでの誤った実行例
fc C:\Users\NKOJIMA\Desktop\test\a.txt C:\Users\NKOJIMA\Desktop\test\b.txt
実行結果(誤った実行例)
Format-Custom : 引数 'C:\Users\NKOJIMA\Desktop\test\b.txt' を受け入れる位置指定パラメーターが見つかりません。
発生場所 行:1 文字:1
+ fc C:\Users\NKOJIMA\Desktop\test\a.txt C:\Users\NKOJIMA\Desktop\test\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Format-Custom]、ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.FormatCustomCommand
  • 上記のエラーを回避するには、fc.exeと書いてfcコマンドを実行します。
  • なぜこのようなエラーが発生するのか調べてみたところ、PowerShell上ではfcFormat-Customコマンドレットのエイリアスとして登録されており、単にfcと書くだけだとFormat-Customコマンドレットが呼び出されることが原因のようです。
PowerShellでの正しい実行例
fc.exe C:\Users\NKOJIMA\Desktop\test\a.txt 
実行結果(正しい実行例)
C:\Users\NKOJIMA\Desktop\test\b.txt
ファイル C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt と C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT を比較しています
***** C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt
0123456789
abcdefghijklmnopqrstuvwxyz
0123456789
***** C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT
0123456789
0123456789
*****

***** C:\USERS\NKOJIMA\DESKTOP\TEST\a.txt
***** C:\USERS\NKOJIMA\DESKTOP\TEST\B.TXT
0123456789
*****

参考URL

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?