PowerShellでrobocopyを使ってフォルダをバックアップする方法|初心者向け

PowerShell

Windowsでフォルダをバックアップしたいとき、「毎回エクスプローラーでコピーするのは面倒」と感じることはありませんか?
そんなときに便利なのが、Windowsに標準搭載されているrobocopy(ロボコピー)です。
robocopyをPowerShellから実行すれば、フォルダのバックアップをコマンドで簡単に実行できます。
さらにPowerShellのスクリプトにしておけば、バックアップ処理を何度も実行したり、複数のフォルダをまとめてバックアップしたりすることも可能です。
この記事では、PowerShell初心者向けに、PowerShellからrobocopyを実行してフォルダをバックアップする方法を分かりやすく解説します。

robocopyの基本的なオプションや詳しい使い方については、こちらの記事で紹介しています。
【PowerShell】robocopyコマンドを使う方法

PowerShellからrobocopyを実行できる

まず知っておきたいのが、robocopyはPowerShell専用のコマンドではないということです。
robocopyはWindowsに用意されている実行ファイルで、PowerShellから呼び出して実行できます。
例えば、次のように書くだけです。

robocopy "C:\Data" "D:\Backup"

これは、

  • C:\Data → バックアップ元
  • D:\Backup → バックアップ先

として、フォルダの内容をコピーする例です。
Microsoftのドキュメントでも、robocopyの基本構文は次のようになっています。

robocopy <source> <destination> [<file>] [<options>]

つまり、PowerShellで特別な設定をしなくても、robocopyをそのまま実行できます。

まずはPowerShellからrobocopyを実行してみる

① PowerShellを起動する

スタートメニューから「PowerShell」を検索して起動します。
Windows 11の場合は、「ターミナル」からPowerShellを起動しても構いません。

② バックアップ先のフォルダを用意する

例えば、次のようなフォルダがあるとします。

C:\Users\user\Documents

このフォルダを、

D:\Backup\Documents

へバックアップするとします。

③ robocopyを実行する

PowerShellで次のコマンドを実行します。

robocopy "C:\Users\user\Documents" "D:\Backup\Documents"

これだけで、Documentsフォルダのファイルをバックアップできます。
パスにスペースが含まれる可能性があるため、フォルダのパスは"(ダブルクォーテーション)で囲んでおくと安全です。

サブフォルダも含めてバックアップする

フォルダの中にサブフォルダがある場合は、/Eを付ける方法が分かりやすいです。

robocopy "C:\Users\user\Documents" "D:\Backup\Documents" /E

/Eを指定すると、サブフォルダを含めてコピーできます。
空のフォルダも含めてコピーされるのがポイントです。
例えば、

Documents
├─ Excel
│  ├─ test.xlsx
│  └─ sample.xlsx
├─ Word
│  └─ document.docx
└─ PDF

というフォルダをバックアップすると、

Backup
└─ Documents
   ├─ Excel
   │  ├─ test.xlsx
   │  └─ sample.xlsx
   ├─ Word
   │  └─ document.docx
   └─ PDF

のように、フォルダ構成を保ったままコピーできます。

何度もバックアップするとどうなる?

robocopyの便利なところは、毎回すべてのファイルをコピーし直す必要がないことです。
例えば、最初に100個のファイルをバックアップしたとします。
その後、1つのExcelファイルだけを変更して再度robocopyを実行すると、変更されたファイルなどを確認しながらコピー処理が行われます。
そのため、通常の「フォルダを丸ごとコピー」よりも、定期的なバックアップ処理に向いています。

PowerShellの変数を使うと分かりやすい

PowerShellでrobocopyを使うなら、コピー元とコピー先を変数に入れておく方法がおすすめです。

$source = "C:\Users\user\Documents"
$destination = "D:\Backup\Documents"

robocopy $source $destination /E

この書き方なら、後からバックアップ先を変更するときも簡単です。
例えば、

$source = "C:\Users\user\Documents"
$destination = "D:\Backup\Documents"

の部分だけ変更すれば済みます。
PowerShellでバックアップスクリプトを作る場合は、この形にしておくと管理しやすくなります。

「コピーした内容」をログに残す

バックアップを自動化する場合、正常にコピーできたのか後から確認できるように、ログを残しておくと便利です。
robocopyには/LOG:というオプションがあります。
例えば、

$source = "C:\Users\user\Documents"
$destination = "D:\Backup\Documents"
$log = "D:\Backup\backup.log"

robocopy $source $destination /E /LOG:$log

とします。
すると、バックアップ処理の結果をbackup.logに保存できます。
Microsoftもrobocopyを実行する際には、処理完了後に確認できるログファイルを作成する方法を案内しています。

バックアップ用のPowerShellスクリプトを作る

毎回PowerShellを開いてコマンドを入力するのが面倒なら、PowerShellスクリプトにしてしまいましょう。
例えば、次の内容をbackup.ps1として保存します。

# バックアップ元
$source = "C:\Users\user\Documents"

# バックアップ先
$destination = "D:\Backup\Documents"

# ログファイル
$log = "D:\Backup\backup.log"

# バックアップ実行
robocopy $source $destination /E /LOG:$log

Write-Host "バックアップが完了しました。"

これで、同じバックアップ処理を何度でも実行できます。
例えば、

backup.ps1

というファイルを作っておけば、必要なときに実行するだけです。

robocopyの実行結果を確認する

robocopyを実行すると、PowerShell画面に処理結果が表示されます。
例えば、

Total
    Dirs :        10
   Files :        125
   Bytes :        25.4 m

のように、処理したフォルダやファイルの情報を確認できます。
「ちゃんとバックアップできたかな?」というときは、コピー先のフォルダだけでなく、robocopyの実行結果やログファイルも確認すると安心です。

大事な注意点:/MIRは慎重に使う

robocopyには、フォルダを完全に同期する/MIRというオプションがあります。
例えば、

robocopy $source $destination /MIR

とすると、コピー元とコピー先をミラーリングできます。
ただし、/MIRは便利な反面、コピー元に存在しないファイルがコピー先にある場合、そのファイルが削除される可能性があります。
Microsoftのドキュメントでも、/MIR/E/PURGEを組み合わせたものと説明されています。
そのため、

robocopy $source $destination /MIR

を「バックアップだから安全」と考えて使うのは危険です。
特に初心者の場合は、まず/Eを使ったバックアップから始めるのがおすすめです。

本当にコピーされるかテストする方法

「いきなりファイルをコピーするのはちょっと怖い」という場合は、/Lを使って確認できます。

robocopy $source $destination /E /L

/Lを指定すると、実際にはコピーせず、実行した場合の内容を確認できます。
バックアップスクリプトを作るときは、最初に/Lを付けて動作を確認してから、本番のコピーを実行すると安心です。

複数のフォルダをまとめてバックアップする

PowerShellとrobocopyを組み合わせると、複数のフォルダをまとめてバックアップすることもできます。
例えば、

robocopy "C:\Users\user\Documents" "D:\Backup\Documents" /E

robocopy "C:\Users\user\Pictures" "D:\Backup\Pictures" /E

robocopy "C:\Users\user\Desktop" "D:\Backup\Desktop" /E

のように書きます。
PowerShellスクリプトに複数のrobocopyコマンドを書いておけば、上から順番に処理できます。
「DocumentsをバックアップしたあとPicturesをバックアップする」といった処理をまとめて実行できるため、定期的なバックアップにも便利です。

PowerShellでrobocopyを使うメリット

PowerShellからrobocopyを実行するメリットをまとめると、次のようになります。

① コマンドを繰り返し実行できる

毎回エクスプローラーでフォルダをコピーする必要がありません。

② スクリプト化できる

.ps1ファイルにしておけば、同じバックアップ処理を簡単に実行できます。

③ 複数フォルダをまとめて処理できる

複数のrobocopyコマンドを1つのスクリプトにまとめられます。

④ ログを残せる

/LOG:を使えば、バックアップの実行結果をファイルに保存できます。

⑤ タスクスケジューラと組み合わせられる

PowerShellスクリプトをタスクスケジューラから実行すれば、決まった時間にバックアップを実行することもできます。

まとめ

今回は、PowerShellからrobocopyを実行して、フォルダをバックアップする方法を紹介しました。
基本的な形は、

robocopy "コピー元" "コピー先" /E

です。
さらにPowerShellの変数を使えば、

$source = "C:\Users\user\Documents"
$destination = "D:\Backup\Documents"

robocopy $source $destination /E

のように、バックアップ処理を分かりやすく記述できます。
定期的にバックアップする場合は、ログを残すために、

robocopy $source $destination /E /LOG:$log

のようにするのもおすすめです。
なお、/MIRはコピー先のファイルを削除する可能性があるため、使用するときは注意してください。
PowerShell+robocopyを組み合わせると、単純なファイルコピーだけでなく、複数フォルダのバックアップやログ保存、自動実行など、さまざまな処理を自動化できます。
まずは/Eを使ったシンプルなバックアップから試してみるとよいでしょう。

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