みなさんは業務中に大量のデータの他のフォルダへのコピーや移動はきちんとできていますか?
コピー途中で原因不明のエラーが出ても気にせず続行しちゃったりしていませんか?エラー等によりコピー漏れが出てきても困ります。高速かつ正確にやりたいところですよね。
ここで頼りになるのがWindowsに標準で備わっている「robocopy」コマンドです。
この記事では実際にrobocopyがどのように使用できるのか、他のコマンドと何が異なるのかを詳しく説明します。
robocopyとは何なのか?
まず「robocopy」という名前ですが、これは「Robust File Copy(強力なファイルコピー)」の略で、非常に高性能なファイルコピーコマンドです。
このコマンドは、一般的なコピーコマンドに比べて多くのオプションが用意されており、ネットワーク経由でのファイル転送やバックアップ作業の効率性を向上させることができます。
また、robocopyは複数回に渡るコピー操作や、コピーが中断した際の再開機能など、より高度な操作が可能です。
robocopyの基本的な使い方
robocopyの基本
基本的な使い方としては、コマンドプロンプト上で以下のようにコピー元とコピー先のディレクトリを指定して使います。通常のファイルコピーでは copy や xcopy コマンドが使われますが、robocopyはその上位互換です。
robocopy C:\src D:\dst
この例でいくと、Cドライブの「src」フォルダ内のデータが、Dドライブの「dst」フォルダにコピーされます。
デフォルトでは指定したフォルダ内のファイルだけが対象となってしまいます。サブフォルダも含めてコピーしたい場合は /s オプションをつけます。また、空のフォルダも対象としたい場合は /e オプションをつけます。
- /s
サブフォルダもコピー - /e
空フォルダもコピー
これだけだと何の変哲もないコピーコマンドですが、robocopyには豊富なオプションが用意されていて、いろいろなことができます。
例えば以下で紹介する /MIR(ミラーリング)を使うと、コピー元とコピー先のフォルダの中身を全く同じ状態にするので、上記のような /s や /e の出番はなくなります。ここからがrobocopyの醍醐味なのです。
個人的によく使うオプション
いきなりですが、個人的によく使うオプションを紹介します。これだけ知っておけば本格的なデータ移行もあまり困ることはないです。
robocopyはオプションが多すぎるので、実際に現場で使うコマンドを中心に覚えたほうが手っ取り早いですよ
robocopy C:\src D:\dst /MIR /DCOPY:DAT /R:1 /W:5 /LOG:sample.log /NP /TEE /XD "System Volume Information" /XF "*.tmp" /MOVE
- /MIR
コピー元フォルダをそっくりそのままコピー先に再現するミラーリング - /DCOPY:DAT
フォルダの日付情報もコピー元と同じにする - /R:1
1回リトライ。デフォルト値は100万回なので、これを指定しておかないとディスクエラー等があると終わらなくなる。 - /W:5
失敗時に5秒待機。デフォルト値は30秒。 - /LOG:sample.log
sample.log にログを保存 - /LOG+:sample.log
sample.log にログを追記保存 - /NP
コピー完了率を非表示(Logの可読性アップ) - /TEE
/LOG オプション使用時は通常コンソールへの表示が行われなくなるが、このオプションを使うとコンソールに表示される。 - /XD “System Volume Information”
特定のディレクトリを除外。 - /XF “*.tmp”
特定のファイルを除外。 - /MOV
ファイルを移動 (コピー元から削除)。 - /MOVE
ファイルとディレクトリを移動 (コピー元から削除)。
NAS内のデータ移行のときなんかも、「trushbox(ゴミ箱)」を /XD オプションで移行対象外にできるわけですね
robocopyとxcopyの違い
よく似たコマンドに「xcopy」がありますが、robocopy と xcopy にはどのような違いがあるのでしょうか。xcopy は robocopy よりもシンプルで、多くのWindowsユーザーにとっては馴染み深いツールです。
ですが、例えばxcopyには、robocopyのようなミラーリング機能やマルチスレッドコピー機能がないなど、よりコピーに特化した機能はありません。
xcopyは基本的なファイルコピーに向いているのに対し、robocopyはより複雑なタスクでその威力を発揮するといっていいでしょう。
robocopyのコピー速度を上げる方法
robocopyのコピー速度を向上させる方法について知っておくと便利です。
コピー速度を上げるには、「/MT」オプションを活用します。これはマルチスレッドコピー機能を提供し、同時に複数のファイルをコピーすることで、全体のコピー速度を高めることができます。
CPUコア数が多数あることが前提となります
デフォルトでは「robocopy /MT:8」となっています。これは8つのスレッドで並列コピーを行うという意味です。
注意点としては、CPUが8コア以上ある場合は「robocopy /MT:8」が有効に働いてくれるのですが、満たない場合は必ずしも高速化できるとは限りません。個人的には、MTには実際のコア数と同じか、それより小さい値を設定すべきです。
それぞれの環境においてチューニングが必要ということは念頭において使いましょう。
robocopyの実行時間指定ができる /RH オプション
ファイルサーバやNASのデータ移行の際、「業務時間中は避けてね」と言われるなんて日常茶飯事です。
そんな時は RHオプション をおすすめします。
以下のように指定してやると、23時から翌6:30までの間だけコピーや同期処理を実行してくれるので便利です。
/RH:2300-0630
robocopyをファイル比較に利用する裏技
robocopyは本来ファイルをコピーする・バックアップするという目的で使用されますが、裏技的にファイル比較に使うこともできます。
以下は /L を指定することで実際にはコピーを行わず差分を表示させるだけのコマンドです。
robocopy "C:\Users\user001\Desktop\sample01_bk" "C:\Users\user001\Desktop\sample01" /L /E /R:1 /FP /LOG:"C:\Users\user001\Desktop"
robocopy [コピー元] [コピー先] /L /E /R:1 /FP /LOG:[ログファイル]
<オプション>
/L:リストのみ表示する(コピーを実施しない)
/E:空のフォルダ含むサブフォルダもコピー
/R:1:失敗したコピーに対する再試行回数(1回にしている)
/FP:主力にファイルの完全なパス名を含む
/LOG:ログ保存先パス(ファイル名まで指定する)
結果
さいごに
robocopyの機能についてかいつまんで説明してきましたが、機能が多すぎて細かいところまではまだまだ説明しきれていません。
実際に使う際には、以下のコマンドで、自分の使いたいオプションを見つけることをおすすめします。以下のコマンドを実行すればrobocopyの機能の多さを実感するはずです。
robocopy /?
robocopyの多機能さを実感できましたか?
robocopyを正しく使いこなして、業務の効率化に役立てましょう。
本ブログでは業務に役立つ技術情報をこれからも発信していきますので、困った時にはぜひ参考にしてみて下さいね。
コメント