コスパ重視で生きたい人生だった

なるべく楽して生きて行きたい30代サラリーマンのブログ

Windowsのコマンドプロンプトでdiffもどきを行う方法


どうも。ぼくです。
以下、わかる人にはわかってもらえて、通じない人には全くわからない話。
Windowsの端末で作業をするとき、「あのフォルダとこのフォルダのファイル、どっちに何が足りないか調べたい!」っていうことがよくあります。いや、たまに・・・会社生活5年のうち一回くらいは・・・あります・・・
そういうことがありました。

Linuxであれば、「diff」コマンドで簡単に比較ができるんですがWindowsでは使えません。
Windows用のフリーソフトでそんな機能をもつやつもあるんですが、今回のWindows端末は外部につながっておらず、フリーソフトも利用できない。
そんな状況のときに役立つ方法です。かなり限定的だけど気にしない!


●diffの代用となりうる「fc」コマンド

Windowsのコマンドプロンプトにはdiffはありませんが、「fc」というコマンドがあるようです。今回はじめて知りました。よくわからないけど、"file compare"の略称な気がします。
このコマンドを使うと、ファイル同士を比較できます。
以下、フォルダ「aaa」とフォルダ「bbb」を比較してどっちに何のファイルが無いか確認する方法です。

C:\Documents and Settings\user1>cd C:\aaa  //C:\aaaに移動

C:\aaa>dir /b > aaa.txt  //C:\aaaにあるファイルの名前のみをaaa.txtに書き込み

C:\aaa>cd ../bbb //C:\bbbに移動

C:\bbb>dir /b > ../aaa\bbb.txt  //C:\bbbにあるファイルの名前のみをbbb.txt(今回は比較のためにaaaフォルダに保存)に書き込み

C:\bbb>cd ../aaa  //再びC:\aaaに移動  

C:\aaa>fc /n aaa.txt bbb.txt  //aaa.txtとbbb.txtを比較。今回はaaa.txtを作ったので、差分にでてきてます
ファイル aaa.txt と bbb.txt を比較しています
 ***** aaa.txt
1: aaa.txt
2: allitem.php
3: call_user_func.php
 ***** bbb.txt
1: allitem.php
2: call_user_func.php
 *****

 ***** aaa.txt
8: rcvarray.php
9: rcvform.php
10: rcvform_array.php
 ***** bbb.txt
7: rcvarray.php
8: rcvform_array.php
 *****

結果、どうやらbbbフォルダに「rcvform.php」というファイルが足りないようです。となります。


●fcコマンドを使用する上でのポイント

オプション/nをつけよう!

比較結果には差分のある行と"その前後の行"が出力されます。そのため、差分が多いファイルになると何がなんだかわからなくるので、少しでもわかりやすくなるように/nオプションをつけることをお勧めします。

ちなみに、dirコマンドに/bオプションをつけると「ファイル名のみ」の表示になります。ただdirのみだと、ファイル名と更新日時が表示されます。これを利用すると、ある時点でフォルダのコピーをとっておき、その後更新のあったファイルは何か確認するということができたりします。
以下、その一例。

C:\aaa>dir > aaa.txt
C:\aaa>cd ../bbb
C:\bbb>dir > ../aaa\bbb.txt
C:\bbb>cd ../aaa
C:\aaa>fc /n aaa.txt bbb.txt
ファイル aaa.txt と BBB.TXT を比較しています
//ここは無視していい差分
 ***** aaa.txt

3:
4: C:\aaa のディレクトリ

5:
6: 2012/04/04 02:09 <DIR> .
7: 2012/04/04 02:09 <DIR> ..
8: 2012/04/04 02:09 0 aaa.txt
9: 2011/12/27 15:37 474 allitem.php
 ***** BBB.TXT
3:
4: C:\bbb のディレクトリ

5:
6: 2012/04/04 02:07 <DIR> .
7: 2012/04/04 02:07 <DIR> ..
8: 2011/12/27 15:37 474 allitem.php
 *****

//どうやらrcvform.phpが更新されているようで。
 ***** aaa.txt
15: 2011/12/27 16:17 610 rcvarray.php
16: 2011/12/26 16:39 346 rcvform.php
17: 2011/12/26 17:01 650 rcvform_array.php
 ***** BBB.TXT
14: 2011/12/27 16:17 610 rcvarray.php
15: 2012/04/04 02:07 347 rcvform.php
16: 2011/12/26 17:01 650 rcvform_array.php
 *****

//ここも無視していい差分
 ***** aaa.txt
20: 2011/12/27 15:01 446 rcvpost.php
21: 13 個のファイル 5,232 バイト
22: 2 個のディレクトリ 186,216,153,088 バイトの空き領域
 ***** BBB.TXT
19: 2011/12/27 15:01 446 rcvpost.php
20: 12 個のファイル 5,233 バイト
21: 2 個のディレクトリ 186,216,148,992 バイトの空き領域
 *****

という風になります。
そんじゃまた。

ポケット詳解Windowsコマンド辞典Windows8対応 (Pocket詳解)

ポケット詳解Windowsコマンド辞典Windows8対応 (Pocket詳解)