🙆

高機能な Robocopy を使用したバックアップ

2023/06/13に公開

はじめに

Robocopy(Robust File Copy)は、Windows に組み込まれている高機能なコマンドラインツールです。大量のファイルやディレクトリのコピー、移動および同期を行うために設計されています。その高度な機能とオプションの豊富さから、バックアップやデータ移行のタスクに使用すると非常に便利です。

基本的な使い方

Robocopy を使用して特定のディレクトリを別の場所にバックアップする基本的なバッチファイルを示します。

@echo off

SET src=C:\path\to\source\directory
SET dst=D:\path\to\destination\directory

robocopy %src% %dst% /E /Z /COPY:DAT /R:3 /W:5

以下は、上記で使用されている robocopy コマンドのオプションの説明です。

/E - 空のサブディレクトリを含むすべてのサブディレクトリをコピーします。
/Z - ネットワーク接続が中断された場合でも、コピー操作を再開できるようにします。
/COPY:DAT - データ、属性、タイムスタンプをコピーします。
/R:3 - アクセス不能なファイルに対する再試行回数を 3 回に設定します。
/W:5 - 再試行間の待機時間を 5 秒に設定します。

このバッチファイルをタスクスケジューラーで定期的に実行することで、指定したディレクトリのバックアップを自動的に作成することができます。

特筆すべきは、/Z オプションです。これにより、コピー操作が中断された場合でも途中から再開できるため、大規模なデータ移行作業において非常に便利です。

コピー元とコピー先の同期

さらに、Robocopyは、コピー元とコピー先のディレクトリを同期させるためのオプション(/MIR)も提供しています。これにより、バックアップが常に最新の状態を反映するように保つことができます。以下に例を示します。

@echo off

SET src=C:\path\to\source\directory
SET dst=D:\path\to\destination\directory

robocopy %source% %destination% /MIR

PowerShell の場合

PowerShell でも、robocopy に近いことはできます。以下に例を示します。

$src = "C:\path\to\source\directory"
$dst = "D:\path\to\destination\directory"

Copy-Item -Path $src -Destination $dst -Recurse -Force

以下は、上記で使用されている Copy-Item コマンドのオプションの説明です。

-Path - コピー元のパスを指定します。
-Destination - コピー先のパスを指定します。
-Recurse - すべてのサブディレクトリをコピーします。
-Force - 読み取り専用属性のファイルもコピーします。

ただし、PowerShell の Copy-Item コマンドは、robocopy のようにネットワーク接続が中断された場合でもコピー操作を再開する機能や、コピー元とコピー先のディレクトリを完全に同期する機能は提供していません。

まとめ

かんたんに使えて強力な機能を持っている Robocopy を紹介しました。昔は Xcopy でバックアップしていた、という方も多いのではないでしょうか。また、PowerShell 使いの方は意外と Robocopy のことは知らないかもしれません。
ところで、冒頭でも紹介したとおり、Robocopy は Robust File Copy の略称です。なぜ、Robucopy ではなくRobocopy なんでしょうね。

Discussion