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