【高速ファイルコピー・ファイル同期】batファイルでFastCopyをコマンド実行

Tips
スポンサーリンク

日頃お仕事でお世話になっているフリーソフトのなかでも、ファイル転送、ファイル同期処理を自動化、効率化する際に利用させていただいるフリーソフトに「FastCopy」があります。
今回の記事では、この大変優秀な「FastCopy」の魅力を紹介しつつ、FastCopyを利用してファイル転送やファイル同期処理をbatファイルで実装する場合のサンプルコードも紹介していきます。

記事執筆時点の「FastCopy」のバージョン:v3.92

「FastCopy」の魅力、凄いところ

フリーソフト界隈では割と有名なソフトだと思いますが、ご存知ではない人もいるかと思うので、簡単に説明します。
「FastCopy」とは、Windows用フリーソフトとして2004年に公開されて以来、長く利用され続けている歴史のあるフリーソフトです。
詳しくは以下のWikipediaの記事をご参照ください。
FastCopy -Wikipedia-

このソフトの機能は「ファイルのコピー」や「ファイル同期処理」です。
それだけ?って思うかも知れませんが、「ファイルのコピーや同期」と一言で言っても、その機能は豊富です。

以下で私がこのソフトを愛用しているオススメポイントを紹介します。

ファイル転送速度が速い

個人的にはこの部分が一番素晴らしいと思っています。
ファイル転送速度の違いを意識する機会は少ないかも知れませんが、例えばネットワーク越しの共有フォルダに対してローカルにあるファイルをコピーする場合、普通はWindowsのエクスプローラーでその共有フォルダにアクセスしてファイルをコピーしますが、実はこの操作で行うファイル転送はかなり遅いのです。
ファイルを別の場所(特にネットワーク越し)に転送する場合に、内部的なアルゴリズムをどの様に作り込んでいるかによって、転送速度は大きく差がでます。
このソフトはそこがとても優秀で、ネットワーク越しのファイル転送ではNICの通信帯域の限界に挑んでくれます。

インストールは不要

このソフトはインストーラーが用意されており、その端末にインストールして使用することもできますが、サーバー環境では稼働しているミドルウェアに影響を与える恐れもあり、安易に別のソフトをインストールしたくはありません。
FastCopyはインストールは必須では無く、FastCopyの実行ファイルやdllなどの関連ファイルを置いたフォルダを丸っとコピーしてくるだけで動作環境が作れます。
サーバー環境を汚さなくて済む部分も非常に助かります。

コマンドラインで操作可能

FastCopyは実行ファイルをダブルクリックなどで実行するとフォームが起動し、FastCopyのファイル転送を画面の操作で行うことができます。
ただ、画面上でマウスやキーボードを使って操作をすることしかできなければ、その操作を自動化するにはRPAなどが必要になります。
FastCopyはコマンドラインから操作ができて、様々なオプションが提供されています。
よって、batファイルを作成し、FastCopyにオプションなどの引数を渡して実行することで、様々なファイル転送操作を自動化させることが可能です。

無償で利用できる

ファイル転送が高速で、インストールも必要なく、コマンド操作で自動化もできるといった優秀なソフトウェアですが、これらの機能を無償で利用できます。
無償で利用する場合は広告が表示されるとかそんなケチ臭い機能もありません。
完全に無料で提供されています。
当然ですが、この部分も非常に有難いです。

 
 

「FastCopy」の活用方法例

当項では、私自身がこれまでの仕事で「FastCopy」をどの様に活用したかを簡単に紹介しておきます。
 

ファイルサーバーのバックアップやデータ移行

どこの企業でも規模の違いはあれど、必ず使用しているのが「ファイルサーバー」。
このファイルサーバー内の大量に保存されているファイル群のバックアップにも「FastCopy」は活用できます。
「FastCopy」では、特定のディレクトリ内のファイルを別のディレクトリと高速に比較して、以下の様なファイル同期が可能です。

  • 足りないファイルと変更が発生したファイルだけコピー:diff(差分)モード
  • 更に元ディレクトリで削除されたファイルも削除:sync(同期)モード

この様なファイル同期をできる機能は世の中に色々とありますが、「FastCopy」はこの処理が非常に速いのが特徴です。
「FastCopy」を利用してバッチを作り、タスクスケジューラーに登録して日次実行させることで、ファイルサーバーの大量のファイル群を、簡単に別の環境にバックアップすることが可能です。
また、ファイルサーバーをリプレイスする場合に、既存のファイルサーバーのファイル群を新ファイルサーバーに移す処理でも、必要となる機能は同じなので、やはり活用できます。
新ファイルサーバーへは日次でファイル群の同期を取りながらサーバー自体の構築を進め、本番サーバーの切り替え直前に再度FastCopyでの同期処理を実行しておいて、本番環境を切り替えるといった移行方法も可能です。
 

大きなファイルのネットワーク越しのファイル転送

「FastCopy」では、ファイル転送処理を高速に行えるのも特徴です。
私が活用している例では、例えばDBサーバーのバックアップファイルを別拠点に日次で転送しています。
データベースのフルダンプしたバックアップファイルは、数十ギガのファイルサイズが複数有り、VPNで接続した拠点へのファイル転送を行う際には、非常に時間が掛かります。
その為、Windows自体のコピー機能で転送するのではなく、「FastCopy」のコピー機能でファイル転送を実装させています。
「FastCopy」でネットワーク越しのファイル転送を実行している最中にタスクマネージャーを起動して、NICのスループットを確認すると、Windows標準のファイルコピー中に観測したNICのスループットよりも遥かに高いスループットが確認できます。
NICに対する負荷は、そのままサーバー自体の負荷としてサーバーの動作やレスポンスに影響を与える為注意が必要が必要ですが、ネットワーク越しの大きなサイズのファイルを転送する場合は、僅かなスループットの違いが、所要時間の大きな違いを生みます。
よって、「ファイル転送が速い」といった特徴は非常に重要です。
 
 

「FastCopy」のダウンロード方法など

当項では、「FastCopy」をダウンロードして自端末上に展開する一連の流れを簡単に紹介します。
 

「FastCopy」のインストーラーをダウンロード

「FastCopy」は「窓の杜」と「Vector」のどちらかでもダウンロードできますが、礼儀として「FastCopy」の公式サイトのURLを案内しておきます。

FastCopy
FastCopy Official site

こちらのページの冒頭にある「Installer」のリンクからインストーラーのダウンロードをしてください。※リンク先は「窓の杜」と「Vector」です。

 

ダウンロードしたインストーラーファイルを実行

インストーラーファイルをダウンロードしたら、ダウンロード先に保存されたインストーラーファイル「FastCopy392_installer.exe」を実行してください。
以下の画面が表示されます。
もちろんインストールしても良いのですが、今回の記事ではインストールしないで使用する方法を紹介しております為、インストール画面内の「展開のみ」ボタンを押下してください。
インストールされずに、「FastCopy」の関連ファイルの展開だけ実行されます。

「展開のみ」ボタンを押下すると、展開先を指定するフォルダダイアログが表示されます。
このダイアログ上部には、32bit用か64bit用のどちらかを指定するラジオボタンが表示されおり、通常は自端末のアーキテクチャに合わせて自動選択されています。
64bit環境で使用するなら、当然「For x64」を選択してください。

展開すると、指定したディレクトリ内に「FastCopy392_x64」フォルダが作成され、そのフォルダ内にFastCopyのファイル群が配置されています。
このフォルダを丸っと使用する環境にコピーしてもらえれば動作環境の準備は完了です。
 
 

「FastCopy」のコマンドライン操作方法

■コマンドライン操作での基本的な書式

fastcopy.exe␣/各オプション␣コピー元のファイルやディレクトリ␣/to=コピー先ディレクトリ

※複数のオプションを指定する場合は、スペースを空けてオプションを並べます。

FastCopyでは様々なオプションが用意されており、それらを活用することで様々な機能をコマンドから実行することができますが、豊富に用意されているオプションのうち、実際に使用することの多いものは全体の一部です。
よって、以下で覚えておいてほしいオプションを紹介しておきます。

オプション モード 説明
/cmd= diff 指定省略時の既定値。コピー先とコピー元のファイルを比較して、コピー先に存在しないファイルは無条件でコピーし、同じファイル名があれば、「サイズ」又は「日付」に差異があればコピー先ファイルを上書きします。
sync コピー先とコピー元のファイルを比較して、コピー元と同じ状態にコピー先を同期します。同一のファイル名でサイズ又は日付に差異があればコピー先ファイルを上書きします。また、コピー先に存在してコピー元に存在しないファイルがあれば、コピー先のファイルを削除します。
force_copy コピー先とコピー元の差分を判定せず、コピー先をコピー元ファイルで全て上書きコピーします。
/auto_close コピー終了時にfastcopy.exeを終了します。このオプションを指定しないとfastcopy.exeはコピー終了後もプロセスとして残り続けます。
/force_close コピーが終了時にエラーが出ていても強制的に終了します。/auto_closeオプションの場合は、エラー発生時は自動的に終了できないのですが、このオプションを指定した場合はエラー発生時でもfastcopy.exeが自動的に終了します。
/log fastcopy.exeの同じディレクトリ内にログファイルを出力してくれます。
/acl アクセスコントロールリスト(ACL)、拡張属性(EA)をコピーします(NTFSのみ有効)
■ログの出力例 こんな感じで出力してくれます。
=================================================
FastCopy(ver3.92 (NoUI)) start at 20xx/xx/xx xx:xx:xx

D:\test1\*.7z
\\192.168.0.1\target1\
差分(サイズ・日付)
————————————————-

TotalRead = 16,545 MB
TotalWrite = 16,545 MB
TotalFiles = 7 (0)
TotalTime = 29:18
TransRate = 9.41 MB/s
FileRate = 0.00 files/s

Result : (ErrFiles : 0 / ErrDirs : 0)

 
 

batファイルから「FastCopy」を呼び出すサンプルコード例

当項では、batファイルで「FastCopy」を呼び出す際のサンプルコードを紹介します。
処理の概要は以下です。

サンプルコード処理概要

  • Dドライブ直下にFastCopy用フォルダを配置
  • 自端末Dドライブの「test1」フォルダ内の拡張子7zのファイル全てを共有フォルダ「target1」配下にdiffモードでコピー
  • 自端末Dドライブの「test2」フォルダとそのなかのファイル全てを共有フォルダ「target2」配下にsyncモードでコピー(アクセス権もそのまま移行)
  • バッチ処理でエラーが発生したら戻り値1、正常終了なら戻り値0を実行元に返す

ご自身の使用する環境に合わせて書き変えて使用してください。

REM echoをオフ
@echo off
REM ディレクトリを移動します。
CD D:\FastCopy392_x64
REM fastcopyで指定したフォルダにコピーします。
fastcopy.exe /cmd=diff /log /force_close "D:\test1\*.7z" /to="\\192.168.0.1\target1\"
fastcopy.exe /cmd=sync /acl /log /force_close "D:\test2" /to="\\192.168.0.1\target2\"
REM エラーが発生した場合、:ERRORの行に処理を移す
if %errorlevel% 1 goto ERROR
REM 戻り値 0 でバッチを終了
exit /b 0
:ERROR
REM 戻り値 1 でバッチを終了
exit /b 1

 
 

【注意】同期モードでの誤設定によるデータ消失のリスク

「FastCopy」の魅力や便利な使い方をこれまで紹介してきましたが、一点だけ十分に注意していただきたい部分があります。
前述したオプションの /cmd=sync ですが、このオプションでは、同期元のディレクトリと同じ状態に同期先を更新します。
同期元が適切な状態に管理されている分には問題はありませんが、もし、同期元ディレクトリが何らかの原因で「空っぽ」の状態で同期処理を動かすとどうなるか・・・。

同期先のディレクトリのファイルが全削除されます。

実はこの悲劇を何度か目の当たりにしているので、同期モードについては、十分に注意して使用してください。
 
 

最後に

今回の記事では、有名なフリーソフト「FastCopy」を使用したコマンドラインでのファイルコピーやファイル同期のやり方を紹介しました。
もしまだ当ソフトを利用されていない場合は、非常に便利なソフトですので、今回の記事を参考に、是非利用してみてください。

今回も読んでいただきましてありがとうございました。
それでは皆さまごきげんよう。

タイトルとURLをコピーしました