fcdel - ファイルの比較と削除 2つのファイルを比較して、同一の内容なら片方を削除します。 ■前口上 皆さんはファイルの比較というものをどのように行っておられるので しょうか。DOS 付属の FC で行っておられる方も多いと思います。私も、 FC か、又は ZCOPY で行っています。 さて、その結果、まったく同一のファイルだと判明したら、どうなさ っていますでしょうか。私は、片一方を消去することが非常に多いです。 そこで、これを同時に行うプログラムを作りました。 ■動作環境 MS-DOS Ver.3.0以上汎用(のはず)。 テストは、以下の環境で行われています。 PC-9801DA2 + MS-DOS V3.30D (NEC製) MS-DOS V5.00A (NEC製) MS-DOS V6.20 (NEC製) OS/2 Warp (NEC製) PC-9821Nd2 + MS-DOS V6.20 (NEC製) OS/2 Warp (NEC製) PC-9821As + Windows95 (NEC製) MS-DOS V6.20 (NEC製) FMV-5100 + Windows95 OASYS POCKET 3 + MS-DOS V3.1(L10-009) また、厳密なテストは行っておりませんが、MS-Lan Manager の動作し ている様々なマシン(主に PC-98 シリーズ)で日常的に動作しており、 特に不具合は発生しておりません。さらに、AT互換機上の Windows95 の DOS窓でも、とりあえず動いています。 ■使用法 Usage: fcdel [-F][-S][-C][-D][-Q][-K] [|] file1 と file2 を比較して、同一の内容なら、file1を消去します。 または file1 と、path 内の同名ファイルを比較して、同一の内容なら、 file1 を消去します。 file2 も path も省略されたときは、既定値として "." (カレント ディレクトリ)が仮定されます。 ファイル名やパス名に Windows95 のロングファイルネームを使用する こともできます。 なお、ワイルドカードはサポートしていないので、どうしても複数の ファイルを一度に比較したい時は、DOS の for コマンドを使ってくだ さい。:-) オプションは、現在、下記のものが有効です。 -F file1 が書込禁止属性になっていても、強制的に消去します。 -S file1 の方がファイルサイズが小さくても比較を行います。 デフォルトでは、サイズが異なっていれば、内容の比較は行い ません。 -C 比較を行うだけで、削除を行いません。ただし、エラーレベル には通常通り比較の結果を返しますので、それを使ってバッチ ファイルの制御などができます。 -D 削除を行った結果、そのファイルがあったディレクトリが空っ ぽとなった場合、そのディレクトリも削除します。また、その 結果その親のディレクトリも空っぽとなった場合、その親ディ レクトリも削除し、さらにその結果・・・と、ルートディレク トリに至るまですべてのサブディレクトリを削除します。 現在、ディレクトリの削除を途中で停止させる手段は用意して いないので、必要なディレクトリまで削除してしまうかもしれ ませんが、どうせファイルのないディレクトリしか消さないん だから、問題ないよね? -Q 基本的に一切の画面表示を行いません。-C と同時に使えば、重 宝するかもしれません。 また、-K と同時に使うと、全くメッセージを出さないでキー入 力待ちになります。このため、一見ハングアップしたかのよう になりますが、これは仕様です。 このオプションを指定した時に表示するメッセージは、オプシ ョン指定のエラーと、usage だけのはずです。もしそれ以外の メッセージが表示された場合は、バグの可能性が高いので、作 者までご連絡ください。 -K 削除するときに、キー入力を待ちます。このとき、^C で中止 することができます。 デフォルトでは、キー入力を待ちません。 ■エラーレベル 削除に成功した場合、または -C オプションを使っていて、ファイル の内容が一致した場合、エラーレベルに0を返します。 何らかの理由で削除に失敗した場合、またはファイルの内容が異なる 場合、エラーレベルに1を返します。 ■ソースに関して LSI C-86 Ver.3.30c に依存した作りになっております。一応、これの 試食版でコンパイルした実行ファイルが同梱されています。 ■著作権、再配布等 一応、著作権は主張させていただきます。以下、本プログラム、およ びドキュメントを総称して「本プログラム等」と表します。 ・本プログラム等の著作権は としき が有します。 ・本プログラム等を使用することにより、使用者の予期しない影響が あっても、作者はなんらの保証および補償をいたしません。特に、 「ファイルが消えてしまった!」というクレームは却下します。 ・本プログラム等の転載、再配布、販売等は、事前に著作権者の許可 を求めなければ、自由にできます。 ^^^^^^^^^^^^ ただし、事前に許可を求められた場合は、原則として全てお断り いたします。なお、事後報告は歓迎いたします。 ^^^^^^^^^^ もちろん書籍、雑誌、CD−ROMへの収録も自由です。 なお、転載等を長期間継続するような場合でも、定期的な連絡・ 報告などは不要です。また、1つのバージョンについて1ヶ所の 転載先に対し3回以上連絡があった場合、当該バージョンの転載 中止を要請することがあります。 ・著作者人格権の同一性保持権に基づき、本プログラム等の改変を自 由に行うことを許可します。というよりも、積極的な改変をお願い いたします。 ただし、改変した本プログラム等では、著作者人格権の氏名表示権 に基づき、原作者の著作権表示を消去することを要請します。 なお、差し支えなければ改変した部分をご連絡いただければ、次の バージョンからその改変内容を反映させていただきたいと思います。 ・転載等の際は、入手した本プログラム等のファイル構成に対し変更 を加えずに再配布してください。ただし、本プログラム等に改変を 加えた場合はこの限りではありません。 ・作者は、このプログラムに不備があっても、それを訂正する義務を 負いません。しかし、努力はするでしょうから連絡をお願いします。 ・仕様拡張に関する意見は、私の技術と体力と気力が許す範囲で対応 したいと思います。 ■謝辞 アーカイブ中の実行ファイルは、LSI C-86 Ver 3.30c 試食版でコンパ イルしたものです。LSI C-86 試食版を公開されたエル・エス・アイ ジ ャパン(株)に感謝申し上げます。 引数解釈ルーチンおよびメインの比較ルーチンは、りふらふ さんの コードを参考にさせていただきました。どうもありがとうございます。 (って、ほとんど全部じゃないか(^^; こんなので、本当に著作権を主張 できるのか?) ファイル操作に関し、不具合の発生する可能性を指摘していただいた さかきけい さんに感謝いたします。 ファイルとディレクトリの判別方法をご教示頂いた 葦原中国 さんと WILLs さんに感謝いたします。 ■改版履歴 version 0.01 1995-02-27 ・とりあえず動く version 0.02 1995-03-20 ・2つの file が同一の path だった場合にエラーとなるようにした。 version 0.10 1995-03-28 ・[|] を CD-ROM に対応(したつもり) version 0.20 1995-04-02 ・高速化(りふらふ さん、ありがとう) version 0.30 1995-04-22 ・オプション /F , /S 新設 version 0.40 1995-05-06 ・file2 を省略することを可能とした。 version 0.50 1995-06-03 ・DOS の version が 3 未満の時はエラー終了するようにした。 ・OS/2 J2.11 での動作確認 version 0.51 1995-08-13(未公開) ・/S オプションに関するタコなバグ修正 ・他のコンパイラでも通りやすいように、内部使用関数のちょっとした 変更(これにより実行ファイルサイズが 1.8K 増えた) version 0.52 1995-09-15(未公開) ・将来への布石(^_^;) ・条件コンパイルにより、内部使用関数を戻した。 (これにより実行ファイルサイズが戻った) version 1.00 1995-11-23 ・Quick C で、コンパイルが通ることを確認 (出来上がった実行ファイルがきちんと動くかどうかは未確認) ・いいかげんバグ有りバージョンを公開し続けるのも良心がとがめるの で、ここらで思い切って公開することにした。 version 1.01 1996-01-01 ・Turbo-C で、コンパイルが通ることを確認 (出来上がった実行ファイルがきちんと動くかどうかは未確認) ・エラーレベルに値を返すことを仕様化 ・オプション /C 新設 ・ドキュメントの誤り訂正 ・version 1.00 は LHA 試作版で圧縮してアップロードしていた。 ごめんなさい。m(_._)m version 1.02 1996-09-01 ・OS/2 Warp での動作確認 ・とりあえず を LAN 対応(したつもり) ・漢字を使ったファイル名の不具合をなくした。 ・ファイルをきちんとクローズしてから削除するようにした。 (さかきけい さん、ありがとう) version 1.03 1997-01-03 ・コマンドラインでのファイル名やオプション指定に関するタコなバグ を2点ほど除去 ・ドキュメントの瞹昧な点を修正。 version 1.04 1998-01-04 ・ファイル検索時の属性を修正 ・ドキュメントの瞹昧な点を修正。 ・従来のバージョンでは [|] がファイル名なのかディレ クトリ名なのかの識別を、末尾に¥マークがあるか否かで行っており、 マークがなければファイル、あればディレクトリと判断していた。この バージョンからは、¥マークがない場合はファイルなのかディレクトリ なのか、プログラムが確認するようにした。 (葦原中国 さん、WILLs さん、ありがとう) version 1.10 1999-01-10 ・ある条件のとき、ファイルサイズよりも大きいところを比較してしま い、不一致と言う結果を返してしまっていたのを修正。 ・ドキュメント上のオプション前置文字をスラッシュからマイナスにし た。プログラム上では、初期のバージョンではスラッシュしか許容して いなかったが、v1.03 か v1.04 あたりからスラッシュとマイナスの両 方を許容していた。将来は、スラッシュを非許容とするかもしれません。 ・Windows95 のロングファイルネームに暫定対応。そのために追加した コードはがちがちに LSI-C に依存したものになってしまったので、QC や Turbo-C でコンパイルできるかどうかは不明。 なお、この機能に関して十分な試験は行われておりません。おかしな 挙動をした場合は、ファイル名などを連絡していただければ幸いです。 ちなみに、だれかOS/2の長いファイル名のしくみを教えて下さい。 version 1.11 1999-06-20 ・CD−ROMのファイル名を正常に取得できなくなっていたバグ修正。 v0.10 で取ったバグを再び入れてしまっていた。 ・漢字のディレクトリ名を正しく扱えるようにした。(つもり) ・ドキュメントのミスタイプを修正。仕様に関わる重要な部分であった が、v0.50 くらいから間違ったまま誰にも気づかれていなかった。 作者本人も含め、誰もドキュメントなんて読んでいないらしい。(苦笑) version 1.20 2002-03-20 ・何をいまさらの3年ぶりのバージョンアップ。 ・オプション -D (空ディレクトリ削除)新設。 ・オプション -Q (無口になる)新設。 version 1.30 2002-05-01 ・オプション -K (キー入力待ち)新設。 version 1.31 2003-11-01 ・誤ったファイル名を表示することがあるのを修正。