LANLANパソコン(東京パックス/南中野パソコン教室のLAN化日記)

41.ファイルコピーツールの活用(2008/9/2)

1.「Fast Copy」の利用

 Fast Copyは、白水啓章氏が作成されたフリーのファイルコピーツールである。本家( http://www.ipmsg.org/tools/fastcopy.html )以外に、ベクター他のサイトで入手できる。2008/9/1時点の最新バージョンは、Ver 1.84である。Windowsの標準のエクスプローラや「XCOPY」命令をコマンド画面から利用するより、Fast Copyは、GUI画面から操作でき、しかも、速度が速いというのは、大きな長所である。
 当方でも、同ソフトは、数年前から利用していたが、1月前より、Windows2003 Server でXCOPYに代えて自動実行させている。

2.バッチファイルの作成

 バッチファイルとして、次のようなコマンドを記載したメモ帳で作成し、「コピー.bat」のように拡張子をbatとして保存する。
 下記は、Dドライブのコピー元フォルダの内容をEドライブのコピー先フォルダにコピーする。
 "C:\Program Files\fastcopy\fastcopy.exe"□/force_close□/cmd=diff□/logfile=E:\fastcopy.log□D:\コピー元フォルダ□/to=E:\コピー先フォルダ
 □は、半角空白を示す。ダブルクォーテーションは、フォルダ、ファイル名に空白がある場合は、必要である。
 /cmd=diff は、ファイルサイズ・日付が新しいもののみ追加・更新することを表す。代わりに、 /sync としたときは、コピー元と同期することを表す。
 /force_close は、エラーがあっても継続することを指示する。
 また、/logfile=E:\fastcopy.log は、ファイルコピーのログをEドライブの直下に記録する。ログファイルには、バッチファイルの実行後にコピーの記録が自動的に追加されていく。

3.タスクとして登録

 バッチファイルをWindwos 2003 Server のコントロールパネルのタスクから、タスクとして登録した。約90分間隔で、朝8時から深夜まで、継続時間を約16時間として、実行する。また、パスワードを設定することでログオフしている状態でも自動的に実行する。

4.ログファイルのチェックの必要性

 このように約1ヶ月前にXCOPY命令によるコマンドを記載したバッチファイルからFast Copyを利用するバッチファイルに置き換えて、タスクとして、登録して実行した。しばらくの間、コピーが順調に行われていたが、あるとき、タスクの前回実行日時を見て、ここ2週間ほど、バッチファイルの実行が行われていないことに気がついた。バッチファイルを単体で実行すると問題なく実行できるが、ログオン・オフに関わらず、実行されない。
 ただし、タスクスケジューラでは、「前回の実行結果」が、0x0と表示され、一見正常実行のように見えるが、「前回実行日時」が古いままなので、実行されていないことが分かる。コピー先のファイルを調べても、実際には、コピーが行われていないことが分かる。
 この原因をいろいろと調べてみたが、結局は分からず、仕方がないので、タスクを一度、削除して、同一のバッチファイルを再度、登録すると、正しく実行されるようになった。
 同ソフトの既定では、ログファイルは、Fast Copyのフォルダ内に書かれるため、サーバーに直接、ログインしてログファイルを調べないと正しく実行されたかどうかが分からない。そこで、今回のエラーを踏まえて、共有フォルダ内にログファイルを書き込むように変更し、随時、ログをチェックし、正しく実行されているかを確認している。
 実際に出力される、ログファイルの1件分は、概略、次のようである。Ver1.71の例。テキストファイルなので、メモ帳で見ることができる。
-------------------------------------------------
FastCopy(ver1.71) start at 2008/09/01 22:29:00
<Source> d:\コピー元フォルダ名
<DestDir> E:\コピー先フォルダ名
<Command> 差分(サイズ・日付)
No Errors
TotalRead = ○○ MB
TotalWrite = ○○ MB
TotalFiles = 11 (1)
TotalSkip = △ MB
SkipFiles = □□ (0)
TotalTime = □ sec
TransRate = □ MB/s
FileRate = □ files/s
Result : (ErrFiles : 0 / ErrDirs : 0)