[前の記事]« 日付フォルダ作成について
[次の記事]FTPコマンドにそのつどパラメータを渡すバッチ処理 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FC,COMP…ファイルの比較」索引へ
▲カテゴリー「FOR /F」索引へ
▲カテゴリー「IF(結果の検査、条件分岐)」索引へ

比較したファイルの内容が異なるかどうかで条件分岐させるには


456) ファイル比較結果を判定したい Ritz 2002/07/09(火) 12:06


はじめまして。よろしくお願いします。

2つのファイルの内容を比較して(FCかCOMPかなんでもよいです)、
2つのファイルの内容が全く同じなら、次の処理を起動する(メールを
送るという処理です)、どこか1文字でも違っていたら、何もしない、
ということを行いたいのです。

終了コード(ERRORLEVEL)の判定で、「全く同じ」と「違う」が判定
できたらよさそうなのですが、どちらも同じコードで返って
いるのか、違いが出せません。

なにかよい方法はないでしょうか?


457) Re:ファイル比較結果を判定したい Ritz 2002/07/09(火) 12:47


失礼しました。書き忘れました。
対象は Windows 2000 です。
よろしくお願いします。

459) Re:ファイル比較結果を判定したい SYSOP 2002/07/10(水) 13:03


Ritzさん こんにちは。

>2つのファイルの内容を比較して(FCかCOMPかなんでもよいです)、
>2つのファイルの内容が全く同じなら、次の処理を起動する(メールを
>送るという処理です)、どこか1文字でも違っていたら、何もしない、
>ということを行いたいのです。

>終了コード(ERRORLEVEL)の判定で、「全く同じ」と「違う」が判定
>できたらよさそうなのですが、どちらも同じコードで返って
>いるのか、違いが出せません。

 FCの場合だと、2つのファイルがまったく同一なら2行目に「FC: 相違点は検出されませんでした」という文字列が出力されますね。
 なので、このことを応用した上で何らかの条件分岐手段を講じる、という流れが考えられます。
 Windows2000の標準のコマンド体系の範囲内だと、(ちょっと複雑ですが)FORコマンドの拡張機能を使うことで、下記の書き方で分岐可能でしょう。(ECHO SAMEの部分に必要な処理を書きます)

@ECHO OFF
FC TEST1.TXT TEST2.TXT>RESULT.TXT
FOR /F "skip=1 tokens=2" %%F IN (RESULT.TXT) DO IF %%F.==相違点は検出されませんでした. ECHO SAME

YanaKen


466) Re2:ファイル比較結果を判定したい Ritz 2002/07/11(木) 02:00


SYSOPさん 回答ありがとうございました。
とても参考になりました。

もう1点、お伺いしたいことがあります。

>(ECHO SAMEの部分に必要な処理を書きます)

>@ECHO OFF
>FC TEST1.TXT TEST2.TXT>RESULT.TXT
>FOR /F "skip=1 tokens=2" %%F IN (RESULT.TXT) DO IF %%F.==相違点は検出されませんでした. ECHO SAME

ECHO SAMEにあたるところに書く処理として、
「戻り値に指定の数値を返す」ということをする
方法はありませんでしょうか?
次の処理への連携には、戻り値によって起動するかどうか
の契機とすることができれば、とても便利なのです。
DOSコマンドにはそういう概念はないのかもしれませんが、
もしありましたら。よろしくお願いします。


467) Re3:ファイル比較結果を判定したい SYSOP 2002/07/11(木) 11:28


Ritz さん 参考になったとのこと、恐縮です。

>>@ECHO OFF
>>FC TEST1.TXT TEST2.TXT>RESULT.TXT
>>FOR /F "skip=1 tokens=2" %%F IN (RESULT.TXT) DO IF %%F.==相違点は検出されませんでした. ECHO SAME

>ECHO SAMEにあたるところに書く処理として、
>「戻り値に指定の数値を返す」ということをする
>方法はありませんでしょうか?

 いまひとつ具体的に何をどう記述したいというお話なのかが見えにくいのですが、たぶん環境変数を活用することで足りる範囲の処理ではないでしょうか。
 たとえば他のバッチファイルからCALLで呼ばれたバッチファイルに上のような処理を記述し、それにあわせた処理は「親」のバッチファイル側で行いたい、みたいな場合には、

SET RESULT=0
FOR /F "skip=1 tokens=2" %%F IN (RESULT.TXT) DO IF %%F.==相違点は検出されませんでした. SET RESULT=1

 ……のようにすれば、CALLした側は IF %RESULT%.==1. (以下、必要な処理)のように記述することで条件分岐できると思います。

YanaKen
 
 


カテゴリー「FC,COMP…ファイルの比較」索引へ
カテゴリー「FOR /F」索引へ
カテゴリー「IF(結果の検査、条件分岐)」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2002年07月09日 11:30に投稿されたエントリーのページです。

ひとつ前の投稿は「日付フォルダ作成について」です。

次の投稿は「FTPコマンドにそのつどパラメータを渡すバッチ処理」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート