エディターなどで2つのファイルを比較し「見る」ことはできるのですが、そのファイルの比較結果を「差分」がわかる形でファイル出力またはプリントする方法のアドバイスをいただけないでしょうか。

#ファイルはテキスト形式のものを比較
#質問の場所はここでよいか不安ですが、きっといろいろ実務で使っていることではと想像してこちらでお聞きします。

このQ&Aに関連する最新のQ&A

diff とは」に関するQ&A: 「Diffをとる」とは?

A 回答 (3件)

Windows系ならFCコマンドで比較できますが、世の中捨てたもんじゃないのでフリーで比較するソフトがあります。


参考URLにWindiffをリンクしておきます。

OSはWindowsじゃないよUNIXだという場合はdiffコマンドで比較してください。
使い方はman diffで調べてください。

質問する時はOSを記載してください。
このカテゴリよりOSに合わした方が回答を得やすいですよ。

プログラマだけがこのようなツールを使うのではないので!!

参考URL:http://www.vector.co.jp/soft/win95/util/se120332 …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
使用OSはwindowsでした、すみません。
Windiffは必要としている目的に100%答えてくれます。
これを活用させていただきます。

お礼日時:2001/10/12 12:43

ボクも開発者なので#1の方のように Windiff を使っていますが…。



ないのであれば古くからある「FCコマンド」でいいのではないでしょうか?MSDOSプロンプトから

>fc file1.txt file2.txt とすれば

ファイルの相違点が表示されます。リダイレクトしてファイルに落とせば印刷もできますよ。

fc /? ってやれば使い方が表示されます。
    • good
    • 0

私はプログラムを開発しているので、VisualStudio6.0をインストールしてます。


このVisualStudio6.0に含まれる
「WinDiff」を使用して、2つのファイルの違いを見ています。
そのwindiffには印刷機能とかあるようですよ。
使っていないので、「自信なし」にします。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
しかし、VisualStudio6.0は持っていないので・・。 (^^;

お礼日時:2001/10/12 11:42

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qバッチファイルで一つのファイルをdirで比較し分岐

バッチファイルでフォルダにある全てのファイルに対し
ファイルごとにdir /T:Cとdir /T:Wで比較し
同じならば削除
異なれば何もしない
処理をしたく質問させて頂きました

次のような結果の場合日時が同じなのでファイルを削除する
C:\>dir D:\AAA\001.jpg /T:C
ドライブ D のボリューム ラベルは microSD です
ボリューム シリアル番号は E484-83B8 です

D:\AAA のディレクトリ

2012/11/28 12:59 1,284 001.jpg
1 個のファイル 1,284 バイト
0 個のディレクトリ 24,690,798,592 バイトの空き領域

C:\>dir D:\AAA\001.jpg /T:W
ドライブ D のボリューム ラベルは microSD です
ボリューム シリアル番号は E484-83B8 です

D:\AAA のディレクトリ

2012/11/28 12:59 1,284 001.jpg
1 個のファイル 1,284 バイト
0 個のディレクトリ 24,690,798,592 バイトの空き領域


日時が異なるので何もしない
C:\>dir D:\AAA\002.jpg /T:C
ドライブ D のボリューム ラベルは microSD です
ボリューム シリアル番号は E484-83B8 です

D:\AAA のディレクトリ

2012/11/07 03:12 1,443,326 002.jpg
1 個のファイル 1,443,326 バイト
0 個のディレクトリ 24,690,798,592 バイトの空き領域

C:\>dir D:\AAA\002.jpg /T:W
ドライブ D のボリューム ラベルは microSD です
ボリューム シリアル番号は E484-83B8 です

D:\AAA のディレクトリ

2012/11/04 17:53 1,443,326 002.jpg
1 個のファイル 1,443,326 バイト
0 個のディレクトリ 24,690,798,592 バイトの空き領域


またもっと簡単にdir D:\AAA /T:Cとdir D:\AAA /T:Wの結果で
分岐処理は可能でしょうか

よろしくお願いします

バッチファイルでフォルダにある全てのファイルに対し
ファイルごとにdir /T:Cとdir /T:Wで比較し
同じならば削除
異なれば何もしない
処理をしたく質問させて頂きました

次のような結果の場合日時が同じなのでファイルを削除する
C:\>dir D:\AAA\001.jpg /T:C
ドライブ D のボリューム ラベルは microSD です
ボリューム シリアル番号は E484-83B8 です

D:\AAA のディレクトリ

2012/11/28 12:59 1,284 001.jpg
1 個のファイル 1,284 バイト
0 個...続きを読む

Aベストアンサー

No1です。
これでどうでしょう。

@echo off
cd /d D:\AAA
for /f "delims=" %%A in ('dir /b /s /a-d') do (
for /f "tokens=1,2" %%B in ('dir "%%A" /t:c ^| findstr /b 2') do (
for /f "tokens=1,2" %%D in ('dir "%%A" /t:w ^| findstr /b 2') do (
if "%%B %%C" == "%%D %%E" del "%%A"
)
)
)

QC#で使用中のファイルに別のファイルを上書きしたいのですが

System.IO.StreamReader reader = new System.IO.StreamReader(Filename1, System.Text.Encoding.GetEncoding("utf-8"));
// データセットにXMLファイルを読み込む
dtSet.ReadXml(reader);
...
...
で読込んでいる(内容の変更はしない)ファイルを別Formで別のデータに変更したいのですが、何か方法がありませんか(読み込んだファイルの開放とか)?
File.Copy(FileName2,FileName1, true);
と出来たら一番簡単なのですが、使用中ですのようなエラーが出ます。

Aベストアンサー

読込終わった段階でClose()すればいいだけでは。
ただし、当たり前ですが、別プロセスからの書込みも許可されるようになります。
別プロセスとは、あらゆる外部プログラムを含みます。
そのため、要件によっては、正しいアプローチとは言えないかもしれません。

同一プロセス内での書込みを許可し、更には別プロセスでの読込/書込の許可制御をしたいならば、System.IO.FileStreamを併用すべきでしょう。

// 外部からの読込/書込を許可せずD:\hoge.xmlの読み書きを行う
using (var fs = new System.IO.FileStream(@"D:\hoge.xml",
System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None))
{
// 読み込み
using (var sr = new System.IO.StreamReader(fs, Encoding.UTF8))
{
var dt = new DataSet();
var xml = dt.ReadXml(sr);

// 上書き書き込み
//fs.SetLength(0);
//using (var sw = new System.IO.StreamWriter(fs, Encoding.UTF8))
//{
// sw.Write("test");
//}

// コピー元のファイルがあって上書きしたいなら
using (var copyFs = new System.IO.FileStream(@"D:\hoge2.xml",
System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.None))
{
fs.SetLength(0);
copyFs.CopyTo(fs);
}
}
}

読込終わった段階でClose()すればいいだけでは。
ただし、当たり前ですが、別プロセスからの書込みも許可されるようになります。
別プロセスとは、あらゆる外部プログラムを含みます。
そのため、要件によっては、正しいアプローチとは言えないかもしれません。

同一プロセス内での書込みを許可し、更には別プロセスでの読込/書込の許可制御をしたいならば、System.IO.FileStreamを併用すべきでしょう。

// 外部からの読込/書込を許可せずD:\hoge.xmlの読み書きを行う
using (var fs = new System...続きを読む

Qバッチにてフォルダ内ファイルの差分抽出

フォルダAとフォルダBがあり、
その中に存在するファイルの差分を抽出するバッチを作りたいと考えています。
ファイル名は同名の物の差分を抽出します。
例えば
フォルダA test.txt test2.txt test3.txt
フォルダB test.txt test2.txt test3.txt test4.txt
とあり、test.txtとtest3.txtの内容がフォルダAとBで違っていた場合
その差分を抽出する、といった具合です。
外部でのツールが使用できない環境にあるので、バッチで作成したいのです。
環境はWindows XPです。

以上、よろしくお願い致します。

Aベストアンサー

FOR %%A IN (*.txt) DO FC /n %%A ..\フォルダB\%%A >> ~\sabun.txt
上記を適当なバッチファイルに記述して、フォルダAをカレントにして
実行します。

Qバッチファイルで自動にファイルを比較させたい

あるフォルダ内には2ファイルしかないものとして、
その2ファイルの差異を
自動に比較できないでしょうか。

FCコマンドとDIRコマンドを組み合わせてできるのかなと安易な考えしかなく、具体的にどうしたら良いのかもわかりません。

その都度、FCコマンドを実行すれば済むことですが、バッチファイルを作成して自動になるものであれば自動にしたいので、教えていただけないでしょうか。
ヒントでも構いません。

よろしくおねがいします。

Aベストアンサー

Windwos NT/2000/XP/2003 で cmd.exeを使っていいなら
以下のようなバッチファイルでできます。

setlocal ENABLEDELAYEDEXPANSION

set LIST=
for %%i in (*.txt) do set LIST=!LIST! %%i
echo %LIST%

for /F "tokens=1,2" %%f in ("%LIST%") do fc %%f %%g

endlocal

とりあえず、バッチファイルと同じディレクトリにある.txtという
ファイル2個を fc コマンドに渡して比較します。
バッチファイルと比較対照ファイルを別のディレクトリに
置きたいとか、バッチファイルの引数で渡したという場合には
最初の for 文の in の後の括弧の中を適当にいじってください。

Qバッチファイル 複数ファイルの存在確認及び、比較方法

お世話になっております。

WindowsXP環境にて下記のバッチファイルがあります。

コード---

COPY D:\in\L*.txt E:\out\L*.txt

コード---

単純なコピー処理ですが、この後に下記の処理を追加したいのです。

(1)コピー元からコピー先へちゃんとコピーされたかを判定。

(2)コピー元とコピー先のテキストファイルが同一ファイルかを判定。

(3)(1)・(2)で問題なかった場合により、正常と他のテキストファイルに書き込む。
  1ファイルでもNGだったら異常と書き込む。

おそらく(1)はIF EXIST~、(2)はFC~ で問題なさそうですが
1ファイルずつ(1)・(2)をコードで書くと、膨大になってしまいます。
(3)はIFで可能かもしれません。

そもそも先頭にLがついたファイルは、以下の条件があります。

・日によってファイル数が違う。500ファイルもある場合あり。

・先頭にLがついているテキストファイル以外の共通部分がない。
 L0fje.txtとかL8hfy.txtとか・・・。固定ファイル名がない。

例えば、500ファイルもあると(1)・(2)のコードをひたすらコード入力するのは
非常に効率が悪いです。

良い方法があるでしょうか?

ご存知の方がいれば、ご教授願いますでしょうか?

宜しくお願い致します。

お世話になっております。

WindowsXP環境にて下記のバッチファイルがあります。

コード---

COPY D:\in\L*.txt E:\out\L*.txt

コード---

単純なコピー処理ですが、この後に下記の処理を追加したいのです。

(1)コピー元からコピー先へちゃんとコピーされたかを判定。

(2)コピー元とコピー先のテキストファイルが同一ファイルかを判定。

(3)(1)・(2)で問題なかった場合により、正常と他のテキストファイルに書き込む。
  1ファイルでもNGだったら異常と書き込む。

おそらく(1)はIF EXIS...続きを読む

Aベストアンサー

for /f %%i in (D:\in\L*.txt) do (
 if exist %%i echo %%~nxi
}

上記の1行目の書式で、"D:\in\L*.txt"に該当するファイル名のフルパス名が一つずつ変数"%%i"に入ります。"do"の後ろの"("から3行目の")"の間に実際の処理コマンドを記述します。複数行可。
フルパス名からファイル名+拡張子だけを取り出したい時には、"%%~nxi"で取り出せます。

過去に私が回答した"for"コマンド関連のQ&Aです。
(2つ目と3つ目は、in ( )の部分が若干異なります。)
『OKWave:Windowsバッチでの作成について困っております。』
http://okwave.jp/qa/q5357631.html
『OKWave:Windowsバッチでできるのかな・・・』
http://okwave.jp/qa/q5431927.html
『OKWave:バッチファイルについて』
http://okwave.jp/qa/q5387178.html


人気Q&Aランキング

おすすめ情報