============================================================================== ZCOPY Version 1.20 Copyright (C) 1992 by c.mos ZCOPY.DOC ============================================================================== ■■■ ZCOPYとは ■■■  ZCOPYは、DOSコマンドのXCOPYをパワーアップした、DOS汎用のコマンドです。 名前は「ZCOPY」ですが、コピー以外にも各種の機能をもっています。 ◎ライト時に、複数ファイルをオープンして一度に書き込む、『マルチ・ライト  オープン』方式を採用、少ないシーク動作で高速コピー ◎複数のディレクトリ/ファイルマスクの指定(排他指定あり) ◎ディレクトリ一括コピー(/s)時のディレクトリ位置の保存、およびディレクトリ  ・タイムスタンプのコピー機能(/t) ◎サイズの増加した部分のみコピーする、『インクリメンタル・コピー』機能(/i) ◎ディレクトリ一括も可能なmove機能(/m) ◎ディレクトリ一括も可能なdelete機能(/del) ◎ファイルの高速コンペア機能(/c) 《Ver1.20の追加機能》 ◎レスポンス・ファイル(@file)の対応 ■■■ 書式 ■■■  ZCOPYは、次の書式でコマンドライン・パラメータを記述して使用します。 Usage: zcopy {|[]} [] {/} zcopy [] @filelist [] {/} ソースパス(source path) @filelist レスポンス・ファイル ディレクトリまたはファイルマスク [] の排他指定 ターゲットパス(destination path) / オプション   ※ オプションは、パラメータ中の任意の位置で指定できます。 ■■■ レスポンス・ファイル ■■■  VZ Editor Ver1.6 のファイラーとの連携のため、レスポンス・ファイルに対応しま した。(以降「@FILE」と記述します) ・@FILE は、各行に処理すべきファイル名が記述された、テキストファイルです。 ・@FILE を指定した場合は、原則的に ディレクトリを指定しなくてはなり  ません。 が省略された場合は、以下のように解釈されます。  1. @FILE のファイル名がフルパスで記述されている場合 @FILEの先頭のファイルのディレクトリをディレクトリとします。  2. @FILE のファイル名がファイル名のみの場合 カレントディレクトリをディレクトリとします。 ・@FILE のファイル指定にワイルドカード文字は使えません。 ・@FILE の中にサブディレクトリを記述することもできます。「/s」オプションを  指定した場合は、サブディレクトリ以下の全てのファイルも対象となります。 ~~~~~~~~~~~~~~ ・このように、@FILE では個々のファイルを指定し、コマンドラインで記述した場合は  ファイルマスクとして判断されます。   ■■■ オプション ■■■  ZCOPYには、次の15種類のオプションがあります。オプションは「/」+英字1文字 (/delのみ3文字)で指定します。大文字/小文字は問いません。  「zcopy<リターン>」または「zcopy /?<リターン>」で、オプションの一覧を表示します。 /a: Archive(xcopy /a) /n: No overwrite /b: Backup (xcopy /m) /o: Overwrite only /c: Compare (do not copy) /s: Subdirectories /del: Delete /t: Time stamp copy (with /s) %ロ /e: Echo /u: Update new files /g: Gather /v: Verify /i: Incremental copy /x: hidden files too /m: Move /a: Archive(xcopy /a) XCOPYのオプション「/A」と同様に、アーカイブ属性の付いたファイルだけ をコピー(※)します。あまり使い道はありません。   ※ コピー以外の操作(移動・比較・削除)時にも指定できます。 /b: Backup (xcopy /m) XCOPYのオプション「/M」と同様に、アーカイブ属性の付いたファイルだけ をコピーし、コピー後にソースファイルのアーカイブ属性をクリアします。 このオプションを使えば、タイムスタンプの比較なしに、一度だけバック アップを取ることができます。 /c: Compare (do not copy) ソースとターゲットのファイルを比較します。両方のディレクトリに存在 するファイルのみを比較の対象とし、結果をファイル名の後に表示します。  ・表示なし : 一致  ・mismatch! : 相違箇所あり  ・longer : ソースの方が長い  ・shorter : ソースの方が短い ファイルの中身を実際に比較するのは、サイズが等しい場合のみです。 /del: Delete ソースで指定したファイル/ディレクトリを削除します。確認のキー入力は ありませんので、誤操作を防ぐために3文字のオプション名になっています。     リードオンリ属性の付いたファイル/ディレクトリも削除します。 不可視属性、システム属性の付いたファイルも削除する場合は、オプション 「/del /x」を指定します。 %イ ※ Ver1.02で、削除時のターゲットパスの指定が可能になりました。     この場合は、オプション「/n,/o,/u」のいずれかを指定し、ソースとターゲッ トパスを比較して、選択されたソースパスのファイルを削除します。 /e: Echo (%ロ Ver1.05で追加) コピー/移動/比較の場合は、画面にファイル名を表示するだけで、何も実行 しません。 削除の場合は、削除するファイル名を表示した後、削除を実行します。 /g: Gather 「/s」と同様に下位のサブディレクトリまでコピーの対象としますが、 ファイルを1つのターゲット・ディレクトリに集めます。 ソースの別ディレクトリに存在する同名ファイルは、そのサイズ・時間が 一致した場合は上書きし、異なる場合は、拡張子を「.001, .002, ...」 というように順次リネームした上でコピーします。   ※ このオプション指定時、『マルチ・ライトオープン』機能は働きません。 /i: Incremental copy 「/u」と同様に、日付が新しいファイルのみコピーしますが、ソースファイル がターゲットファイルより大きい場合は、ファイルの末尾を比較し、一致した 場合にはサイズの増えた部分(+α)しかコピーしません。 このオプションは、サイズが大きく、かつ追加されていくだけの、通信の ログファイルのバックアップに最適です。 /m: Move ファイルを移動します。同一ドライブ内で別ディレクトリへ移動する場合は、 ディレクトリエントリの書き換えだけでコピーはしません。 別ドライブへ移動する場合は、コピー終了後、ソースファイル/ディレクトリ を削除します。 /n: No overwrite ターゲット・ディレクトリに既に存在するファイルは、コピーしません。 /o: Overwrite only ターゲット・ディレクトリにも存在するファイルのみ、コピーします。 /s: Subdirectories XCOPYのオプション「/S」と同様に、下位のサブディレクトリまでディレクト リ構造ごとコピーします。 /t: Time stamp copy (with /s) 「/S」でディレクトリ一括コピーする際に、ターゲット側に作るディレクトリ のタイムスタンプを、ソースからコピーします。 /u: Update new files ターゲット・ディレクトリに同名ファイルが存在する場合は、ソースファイル の方が日付が新しい場合のみコピーします。 /v: Verify ライト直後にファイルをリードし、メモリの内容と比較します。相違が生じた 場合は、エラーメッセージを表示してコピーを停止します。 /x: hidden files too 不可視属性、システム属性の付いたファイルも、コピーします。 ■■■ 使用方法 ■■■ ■ 単純コピー(全ファイル指定) C:\>zcopy a: ( A:*.* → C:\ ) ~~~~~~~~ ・ファイルマスクを省略すると、「*.*」と解釈されます。 C:\>zcopy . b: ( C:\*.* → B: ) ~~~~~~~~~~ ・「.」は、カレントディレクトリを意味します。 C:\>zcopy \win b:\win /s ( C:\WIN\.. → B:\WIN\ ) ~~~~~~~~~~~~~~~~~~~~ ・c:\win を b:\win へ一括コピーします。  ZCOPYでは、ターゲットにファイル名を指定する事はできませんので、  「b:\win」は、末尾の「\」がなくともディレクトリと解釈します。 C:\>zcopy \ win b:\ /s ( C:\ WIN\.. → B:\ ) ~~~~~~~~~~~~~~~~~~ ・\ と win をスペースで区切ると win をディレクトリ指定と解釈し、  ソースパス「\」の元の、ディレクトリ「win」を対象とします。  この場合、ターゲットに「\win」を指定する必要はありません。 C:\>zcopy \ win win.j\ b:\ /s ( C:\ WIN\.. , WIN.J\.. → B:\ ) ~~~~~~~~~~~~~~~~~~~~~~~~~ ・同様に、複数のディレクトリを指定できます。ディレクトリの後の「\」  は省略可能ですが、拡張子付きディレクトリを指定する場合は、ファイル  マスクと解釈させないために、「\」を付ける必要があります。 C:\>zcopy \ [dos bin] b:\ /s ~~~~~~~~~~~~~~~~~~~~~~~~~ ・[dos bin] は、排他ディレクトリ指定です。これらのディレクトリは、  コピーしません。  排他ディレクトリにワイルドカードを使用する事はできません。  (ファイルマスクと解釈されてしまいます。) ■ 単純コピー(ファイルマスク指定) C:\>zcopy \ config.* autoexec.* \root ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ・config.*とautoexec.*を \root にコピーします。 C:\>zcopy \vz .def \def ~~~~~~~~~~~~~~~~~~~ ・「*.拡張子」の場合、「*」は省略できます。 C:\>zcopy \win\.ini .txt \txt ~~~~~~~~~~~~~~~~~~~~~~~~~ ・最初のファイルマスク(.ini)は、ソースパス(\win)に続けて記述でき  ます。 C:\>zcopy \src\editfile. b: ~~~~~~~~~~~~~~~~~~~~~~~ ・拡張子のないファイルを指定する場合は、末尾に「.」を付ける必要が  あります。 C:\>zcopy \ sys dos .sys b: ~~~~~~~~~~~~~~~~~~~~~~~ ・c:\sys, c:\dos の中の *.sys をコピーします。ディレクトリ指定、  ファイルマスクの順序は任意ですが、これらはターゲットパスの前に  指定する必要があります。 ■ バックアップ C:\>zcopy a:\ b:\ /s /u ~~~~~~~~~~~~~~~~~~~ ・ドライブAの全ファイル(下位ディレクトリを含む)のうち、ドライブB  に存在しないファイル、および日付の新しいファイルをコピーします。 C:\>zcopy \work [.bak .$$$] b:\bak /u ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ・拡張子が「.bak .$$$」のファイルを除いてバックアップします。 C:\>zcopy \ log b:\ /s /i ~~~~~~~~~~~~~~~~~~~~~ ・c:\log\ 以下にある通信ログファイルを、インクリメンタルコピーで  バックアップします。 %イ C:\>zcopy a:\ b:\bak /s /u C:\>zcopy b:\bak a:\ /s /n /del ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ・ドライブAの全ファイルをb:\bakへバックアップし、かつ b:\bakにしか  存在しなくなったファイルを削除します。  (2つのディレクトリのファイルを一致させる) %ロ C:\>zcopy a:\ b:\bak /s /u /e ~~~~~~~~~~~~~~~~~~~~~~~~~ ・バックアップすべきファイルを表示します。 ■ 特殊機能 C:\>zcopy \ .doc .txt [text] \text /g ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ・ドライブCのテキストファイルを、c:\text へ集めます。 C:\>zcopy \ vz \tool /s /m ~~~~~~~~~~~~~~~~~~~~~~ ・c:\vz を c:\tool\vz へ移動します。 C:\>zcopy a: b: /s /c ~~~~~~~~~~~~~~~~~ ・ドライブAとドライブBの全ファイルを比較します。 C:\>zcopy a: /s /x /del ~~~~~~~~~~~~~~~~~~~ ・ドライブAの全ファイルを消去します。   %イ C:\>zcopy b:\bak \work /n /del ~~~~~~~~~~~~~~~~~~~~~~~~~~ ・b:\bakをc:\workと比較し、b:\bakにのみ存在するファイルを削除します。 %ロ C:\>zcopy a:\ editfile. /g /e ~~~~~~~~~~~~~~~~~~~~~~~~~ ・ドライブAで editfile というファイルをサーチします。 C:\>zcopy .obj .bak /del /e ~~~~~~~~~~~~~~~~~~~~~~~ ・カレントディレクトリの *.obj *.bak ファイルを削除し、削除したファイル  名を表示します。 ■■■ 解説 ■■■ ■ ディレクトリとファイルマスクの識別  ディレクトリとファイルマスクは、以下のロジックで識別します。 「'\'で終わっているか?」 Yes → [ディレクトリ] No ↓ 「'.'またはワイルドカード文字が含まれているか?」 Yes → [ファイルマスク] No → [ディレクトリ] ■ ZCOPYがサポートしていないコピー方式  ・リネームコピー(copy *.txt *.bak)  ・複数ファイルの連結(copy a+b c)  ・デバイスへのコピー(copy a prn)  ・XCOPYのオプション(/D /P /W) ■ 空ディレクトリの扱い  XCOPYのオプション「/E」は、ZCOPYにはありません。空ディレクトリは、以下の ように扱います。  ・全ファイル指定時   → 空ディレクトリもコピー  ・ファイルマスク指定時 → 空ディレクトリはコピーしない ■ マルチ・ライトオープン方式  MS−DOSの各プロセスは、20個までファイルをオープンする事ができます。 このうちの5個は予約済みですから、最大15個のファイルを同時にライトオープン できる計算になります。  もちろん、CONFIG.SYSのFILES=の指定がこれより小さい場合は、FILES=指定に制限 されます。  DIET等のユーティリティを常駐させている場合、ZCOPYが全てのハンドルを使って しまうと、DIETがファイルを開けなくなり、誤動作する危険性があります。 この場合は、FILES=30 以上を指定してください。  いずれにしろ、FILES=30 を指定しておくべきでしょう。  「/g」指定時は、書き込み毎にターゲットファイルを比較する必要から、本機能は 動作しません。 ■ インクリメンタル・コピー機能  増分のみコピーするのは、それ以前の内容が一致している場合に限るべきです。 このため、ターゲットファイルの末尾(4KB未満)を読み込み、ソースファイルと 比較しています。  また、ターゲットファイルのサイズが32KB以上でなければ、インクリメンタル コピーは働きません。 ■ ディレクトリ・タイムスタンプのコピー機能  DOSのシステムコールでは、ディレクトリのタイムスタンプを変更することは できません。このため、一時的に現在日時をソースディレクトリの日時に変更して から、ディレクトリを作成しています。 ■ ベリファイの手法  ZCOPYの「/v」指定時のベリファイでは、DOSの「VERIFY FLAG」を使用しません。 メモリ上のファイルを書き込んだ直後に、再度ターゲットファイルを読み込み、 メモリ内容と比較しています。  このため、大容量のディスクキャッシュが組み込まれている場合には、キャッシュ から読み込んで比較しているだけになる可能性があります。 ■ 削除の手法  ファイルの削除は、以下の方法で行ないます。  ・全ファイル指定時   → FCBによる一括削除(ファンクション13h)  ・ファイルマスク指定時 → パス名による削除(ファンクション41h)   ■ コピーの中断  ファイルコピーの途中に、CTRL+C の入力、またはエラーの発生でコピーが中断する と、ターゲットパスにいくつかのサイズ0のファイルが残ります。    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ただし、ディスクフルによる中断で「/v」を指定していない場合は、これらの ファイルはきちんと消去します。 ■ VZエディタとの連携  VZエディタをお使いの方は、以下の例のように、エイリアス、およびファイラー のメニューを変更すると便利でしょう。  「X 一括コピー」、「Z 一括削除」、「T 一括移動」は、サブディレクトリを選択 した時に呼び出します。  (サブディレクトリの選択機能は、Ver1.57で追加されました。) * S システムメニュー 8 "",15,12 "C コピー copy %1 %2" "M 移動 move %1 %2" "D 削除 del " "X 一括コピー zcopy2 %1 %2" "T 一括移動 move2 %1 %2" "Z 一括削除 zap " "P パック lha a %2 %*" "U アンパック lha x " "V パックリスト lha l " "A 比較(Asc) fca %1 %2" "B 比較(Bin) fcb %1 %2" "E 実行 %1 %2" * A エイリアス ... move zcopy /m zap zcopy /s /x /del zcopy2 zcopy /s %1 %2%\%>\ move2 zcopy /s /m %1 %2%\%>\ ■ エラーメッセージ Syntax error 書式が違います。 Unknown option: 未定義のオプションを指定しています。 File not found 指定したファイルが見つかりません。 Path not found 指定したパスが見つかりません。 Destination must be a path ターゲットパスにファイルを指定しています。 Source and destination are the same path ソースとターゲットが同一のディレクトリです。 Access denied: ファイル/ディレクトリのタイプが異なるか、リードオンリ属性のために 書き込めません。 Insufficient disk space ディスクがいっぱいです。 Verify failure ベリファイでエラーが発生しました。 Unexpected DOS error: n DOSのエラー #n が発生しました。 ■■■ 配布条件、その他 ■■■ ■ 配布条件  ZCOPYはフリー・ソフトウェアです。転載・配布は自由です。  BBS以外のメディアへの転載の際は、作者へご一報ください。 ■ 免責  本プログラムを使用した上で生じたいかなる損害についても、作者は責任を負いま せん。 ■ 変更履歴 Ver0.91 (92-3-14) テスト版 Ver1.00 (92-3-30) 正式公開版 Ver1.01 (92-4-1)  ・「/m」指定時、カレントディレクトリがルートへ移動してしまう。  ・「a*.*」を「a\*.*」と解釈してしまう。  ・「/s /del」でファイルマスクを指定すると、削除されない場合がある。  ・「src\file」で拡張子のないfileの末尾の「.」を省略可能に。 Ver1.02 (92-4-7)  ・他ドライブへmoveすると、ソースディレクトリが削除されてしまう。  ・「/u,/i」指定時、ソース側ファイルの属性(リードオンリetc.)をコピーしない   ように。  ・ファイル削除時のターゲットパスの指定。(→ %イ)  ・ファイル削除時「n File(s) deleted」を表示。 Ver1.03 (92-4-8)  ・他ドライブへのmove時、File(s)表示が2倍になる。  ・copy/move時、ターゲットパスに同名ファイル/リードオンリファイルが存在   する場合もcopy/moveを強行するように。  ・上記変更に伴い、「/u,/i」指定時も属性をコピーするように。 Ver1.04(92-5-6)  ・「zcopy a:\ dir /s /del」とすると、「dir」がターゲットパスとみなされ「a:\」   の全ファイルが削除されてしまった。これを避けるため、「/n /o /u」が指定され   た時のみ、削除時のターゲットパスを認識するように変更。  ・switchar'-'時、「a:/」が指定できなかった。 Ver1.05(92-6-26)  ・を省略すると、[]の最初の項目が無視される。  ・[]を指定すると、拡張子のないファイルが選択されない。  ・「zcopy \src \dst /s /c」で、\dstの直下にファイルが存在しない時、   それ以下のサブディレクトリのファイルを比較しない。  ・「/e: Echo」オプションを追加。(→ %ロ) Ver1.06(92-7-1)  ・削除時に、ファイルマスクの排他指定が効かない。 Ver1.07(92-7-9)  ・「/s /o /u」で、ターゲットパスでファイルが存在しないサブディレクトリの   ファイルも、コピーされてしまう。(Ver1.05のデグレード) Ver1.10(93-10-20)  ・レスポンス・ファイルに対応。 Ver1.11(93-10-24)  ・レスポンス・ファイル指定時の/del,/m,/uのバグフィックス。 Ver1.20(93-12-6)  ・レスポンス・ファイル指定時、カレントディレクトリから他ドライブへのmoveで   元ファイルが削除されない。  ・「/n」でターゲットパスのファイルのサイズが0の場合は、コピーを実行。  ・「/del /s」でルートディレクトリを指定した場合に、確認メッセージ。 93/12/6 兵藤嘉彦(c.mos) NIFTY-Serve GCA03652 ============================================================================== End of zcopy.doc ==============================================================================