PowerShellでフォルダをバックアップする方法|robocopyで自動バックアップ

PowerShell

パソコンの大切なファイルを定期的にバックアップしていますか?
仕事で使うExcelファイルやWordファイル、写真などは、パソコンの故障や誤操作によって突然失われる可能性があります。
しかし、
「毎日手動でバックアップするのは面倒」
「バックアップを忘れてしまう」
という人も多いのではないでしょうか。
そこで便利なのが、PowerShellとrobocopyを組み合わせた自動バックアップです。
robocopyをPowerShellスクリプトから実行し、さらにWindowsの「タスクスケジューラ」と組み合わせれば、指定した時間にフォルダを自動でバックアップできます。
この記事では、PowerShell初心者向けに、robocopyを使ってフォルダを自動バックアップする方法を紹介します。

robocopyの基本的な使い方については、以下の記事で詳しく解説しています。

【PowerShell】robocopyコマンドを使う方法

また、まず手動でPowerShellからrobocopyを実行してみたい場合は、こちらの記事も参考にしてください。

PowerShellでrobocopyを使ってフォルダをバックアップする方法

バックアップの実行結果をファイルに残したい場合はこちらの記事も参考にしてください。

PowerShellでログを出力する方法|Out-File・追記・日付入りログを解説

PowerShell+robocopyならバックアップを自動化できる

今回作る仕組みは、次のようなものです。

バックアップ元
C:\Users\user\Documents
        ↓
PowerShell
        ↓
robocopy
        ↓
バックアップ先
D:\Backup\Documents

さらにWindowsのタスクスケジューラを利用すると、

毎日 22:00
    ↓
PowerShellスクリプトを実行
    ↓
robocopyでバックアップ

という流れを作れます。
一度設定してしまえば、毎日手動でコピーする必要がありません。

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

最初に、robocopyを実行するPowerShellスクリプトを作ります。
例えば、次の内容です。

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

robocopy $source $destination /E

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

このスクリプトでは、

  • $source:バックアップ元
  • $destination:バックアップ先
  • /E:サブフォルダを含めてコピー

という指定をしています。例えば、パソコンの「ドキュメント」フォルダをDドライブへバックアップする場合は、次のようになります。

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

robocopy $source $destination /E

PowerShellスクリプトを保存する

作成した内容を、例えば、

backup.ps1

という名前で保存します。
保存場所は、分かりやすい場所ならどこでも構いません。
例えば、

C:\Backup\backup.ps1

としておくと管理しやすいでしょう。
最初はタスクスケジューラを設定する前に、スクリプトが正常に動作するか確認することが重要です。
PowerShellを起動して、次のように実行します。

C:\Backup\backup.ps1

または、

& "C:\Backup\backup.ps1"

バックアップ先を確認して、ファイルがコピーされていればOKです。

バックアップの実行結果をログに残す

自動バックアップでは、ログを残しておくことをおすすめします。
例えば、次のようにします。

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

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

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

これでrobocopyの実行結果を、

D:\Backup\backup.log

に保存できます。
自動バックアップは画面を見ていない状態で実行されるため、
「本当にバックアップできた?」
と後から確認できるようにしておくと安心です。

日付ごとにログファイルを分ける

さらに便利なのが、日付ごとにログファイルを作る方法です。
PowerShellではGet-Dateを使って現在の日付を取得できます。
例えば、

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

$date = Get-Date -Format "yyyyMMdd"
$log = "D:\Backup\backup_$date.log"

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

とします。
すると、

backup_20260906.log
backup_20260907.log
backup_20260908.log

のように、日付ごとのログファイルを作成できます。
いつバックアップを実行したのか確認しやすくなるので、自動化する場合に便利です。

タスクスケジューラで自動実行する

ここからが今回のポイントです。
PowerShellスクリプトをWindowsのタスクスケジューラに登録します。
タスクスケジューラを使えば、指定した日時にプログラムやスクリプトを自動的に実行できます。
例えば、

毎日22:00
↓
backup.ps1を実行
↓
robocopyでバックアップ

という設定ができます。

タスクスケジューラを起動する

Windowsの検索ボックスで、

タスク スケジューラ

と検索します。
表示された「タスク スケジューラ」を起動してください。
起動したら、右側にある「タスクの作成」をクリックします。
「基本タスクの作成」でも設定できますが、今回は設定項目が多い「タスクの作成」を使います。

① タスクの名前を設定する

「全般」タブで、タスク名を入力します。
例えば、

PowerShell自動バックアップ

とします。
自分で見たときに何をするタスクなのか分かる名前にしておくとよいでしょう。

② バックアップする時間を設定する

「トリガー」タブを開きます。
「新規」をクリックして、バックアップを実行するタイミングを設定します。
例えば毎日バックアップするなら、

毎日
22:00

と設定します。
これで、毎日22時にタスクを実行できます。
仕事で使うファイルなら、パソコンを使い終わる時間帯に設定しておくのもよいでしょう。

③ PowerShellを実行するように設定する

次に「操作」タブを開き、「新規」をクリックします。
「プログラム/スクリプト」に、

powershell.exe

と入力します。
そして「引数の追加」に、PowerShellスクリプトのパスを指定します。

-NoProfile -ExecutionPolicy Bypass -File "C:\Backup\backup.ps1"

これで、タスクスケジューラからPowerShellスクリプトを実行できます。

④ 設定を保存する

必要な設定ができたら「OK」をクリックします。
これでタスクスケジューラへの登録は完了です。
ただし、いきなり翌日まで待つ必要はありません。
登録したタスクを右クリックして「実行」を選択してください。
すると、その場でPowerShellスクリプトが実行されます。
バックアップ先を確認して、ファイルがコピーされているか確認しましょう。

自動バックアップの完成形

ここまで設定すると、次のような仕組みになります。

毎日22:00
    ↓
タスクスケジューラ
    ↓
PowerShell
    ↓
backup.ps1
    ↓
robocopy
    ↓
Documentsをバックアップ
    ↓
ログを保存

一度設定すれば、基本的には毎日自動でバックアップされます。

バックアップ先は別ドライブがおすすめ

バックアップを作るときに注意したいのが、バックアップ元とバックアップ先を同じドライブにしないことです。
例えば、

C:\Users\user\Documents

C:\Backup\Documents

へコピーする方法です。
これは同じCドライブなので、パソコンのストレージ自体が故障すると、元データとバックアップの両方が失われる可能性があります。
できれば、

Cドライブ
  ↓
Dドライブ

や、

パソコン
  ↓
外付けHDD・SSD

など、別の保存先を利用しましょう。
さらに重要なデータの場合は、クラウドストレージなど別の場所にもバックアップしておくと安心です。

/MIRを使うときは注意

robocopyには/MIRという便利なオプションがあります。
例えば、

robocopy $source $destination /MIR

とすると、コピー元とコピー先をミラーリングできます。
ただし、/MIRは使い方を間違えると、コピー先のファイルが削除される可能性があります。
例えば、

コピー元
A.xlsx
B.xlsx

コピー先
A.xlsx
B.xlsx
C.xlsx

という状態でミラーリングすると、コピー元に存在しないC.xlsxがコピー先から削除される可能性があります。
そのため、「とりあえずバックアップしたい」という場合は、まず/Eを使う方法から始めるのがおすすめです。

バックアップできているか定期的に確認する

自動バックアップを設定したら、完全に放置するのはおすすめしません。
定期的に、

  • バックアップ先にファイルがあるか
  • 新しいファイルがコピーされているか
  • ログファイルにエラーがないか
  • バックアップ先の容量が不足していないか

を確認しましょう。
特に大切なのは、「バックアップを取っているつもり」にならないことです。
自動化すると安心してしまいますが、設定ミスや保存先のトラブルなどでバックアップできていない場合があります。

PowerShellでrobocopyを使ってバックアップを自動化する場合にも、
ログを残しておくと実行結果を確認できます。

参考記事:PowerShellでログを出力する方法|Out-File・追記・日付入りログを解説

まとめ:PowerShell+robocopyでバックアップを自動化しよう

今回は、PowerShellとrobocopyを組み合わせて、フォルダを自動バックアップする方法を紹介しました。
基本的な流れは、

PowerShellスクリプトを作成
        ↓
robocopyでバックアップ
        ↓
動作確認
        ↓
タスクスケジューラに登録
        ↓
指定した時間に自動実行

です。
最もシンプルなバックアップなら、

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

robocopy $source $destination /E

から始められます。
さらにログを残すなら、

$date = Get-Date -Format "yyyyMMdd"
$log = "D:\Backup\backup_$date.log"

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

のようにできます。
PowerShell+robocopy+タスクスケジューラを組み合わせることで、毎日のバックアップ作業を自動化できます。
「バックアップを取りたいけれど、毎回手動でコピーするのは面倒」という人は、ぜひ一度試してみてください。

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