PowerShellでrobocopyのログを保存する方法|/LOG・/LOG+の使い方

PowerShell

PowerShellからrobocopyを実行するとき、「コピーが正常に終了したのか確認したい」「エラーが発生していないか後から確認したい」ということがあります。
そんなときに便利なのが、robocopyのログ出力機能です。

robocopyでは、/LOGオプションを指定するだけで、コピー結果をログファイルとして保存できます。

また、過去のログを残したまま新しい実行結果を追加したい場合は、/LOG+を使用します。

この記事では、PowerShellでrobocopyのログを保存する方法について、/LOG/LOG+の違い、日付付きログファイルの作り方、ログを画面にも表示する方法まで初心者向けに解説します。

robocopyの実行結果をログファイルに保存する

robocopyの実行結果をログファイルに保存する場合は、/LOGオプションを使用します。
基本的な書き方は次のとおりです。

robocopy "コピー元" "コピー先" /LOG:"ログファイルの保存先"
例えば、C:\DataフォルダをD:\Backupへコピーし、実行結果をC:\Log\robocopy.logへ保存する場合は次のように記述します。
robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log"
実行すると、robocopyの処理結果が次のファイルに保存されます。
C:\Log\robocopy.log
ログファイルを開くことで、コピーしたファイル数やエラーの有無などを後から確認できます。

定期的にバックアップを実行する場合は、画面上の結果だけでなくログファイルを残しておくと、トラブルが発生したときの確認に便利です。

/LOGを使うと既存のログは上書きされる

/LOGを使用するときに注意したいのが、既に同じログファイルが存在する場合です。
例えば、

robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log"
を繰り返し実行すると、robocopy.logは新しい実行結果で上書きされます。
「最新の実行結果だけ分かればいい」という場合は/LOGで問題ありません。
一方、
昨日のバックアップ結果も残したい
過去の実行履歴を確認したい

という場合は、次に紹介する/LOG+を使用します。

/LOG+で既存のログファイルに追記する

過去のログを残したまま、新しい実行結果を追加する場合は/LOG+を使用します。

robocopy "C:\Data" "D:\Backup" /LOG+:"C:\Log\robocopy.log"

/LOGとの違いは「+」が付いていることです。

オプション 動作
/LOG ログファイルを上書きする
/LOG+ 既存のログファイルに追記する

定期的にrobocopyを実行して、1つのログファイルに履歴を残したい場合は/LOG+が便利です。
ただし、長期間同じファイルへ追記するとログファイルが大きくなるため、日付ごとにログを分ける方法もおすすめです。

PowerShellで日付付きのrobocopyログを作成する

毎日バックアップを実行する場合は、ログファイル名に日付を付けると管理しやすくなります。PowerShellのGet-Dateを利用します。

$date = Get-Date -Format "yyyyMMdd"

robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy_$date.log"
例えば2026年9月10日に実行した場合は、
robocopy_20260910.log
というログファイルが作成されます。
翌日に実行すると、
robocopy_20260911.log
となるため、日付ごとにログを分けて保存できます。
毎日自動バックアップを実行する場合などは、この方法が分かりやすいでしょう。

日付と時刻をファイル名に付ける

1日に複数回robocopyを実行する場合は、時刻もファイル名に含めることができます。

$date = Get-Date -Format "yyyyMMdd_HHmmss"

robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy_$date.log"
例えば、2026年9月10日の20時30分15秒に実行した場合は、
robocopy_20260910_203015.log
のようなファイル名になります。
これなら同じ日に複数回実行してもログファイルが上書きされません。

ログを保存しながら画面にも表示する

/LOGを指定すると、robocopyの詳しい実行結果はログファイルへ出力されます。
「ログファイルにも保存したいけれど、PowerShellの画面でも結果を確認したい」という場合は、/TEEオプションを追加します。

robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log" /TEE

/TEEを指定すると、PowerShellの画面ログファイルの両方に実行結果を出力できます。
手動でrobocopyを実行しながら結果を確認したい場合に便利です。

robocopyのログを見やすくする

robocopyのログにはさまざまな情報が出力されます。
必要に応じてオプションを追加すると、ログを簡潔にすることもできます。
例えば、

robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log" /NP /NFL /NDL
とします。
主なオプションは次のとおりです。
オプション 内容
/NP コピーの進行率を表示しない
/NFL ファイル名をログに表示しない
/NDL ディレクトリ名をログに表示しない
/TEE ログと画面の両方に出力する

ファイル数が多い場合、すべてのファイル名をログに記録するとログファイルが非常に長くなることがあります。

必要な情報に合わせてオプションを使い分けましょう。

ログの保存先フォルダがない場合は作成する

PowerShellから自動実行する場合は、ログの保存先フォルダが存在するかも確認しておくと安全です。
例えば、C:\Logが存在しなければ作成するようにします。

$logDir = "C:\Log"

if (-not (Test-Path $logDir)) {
    New-Item -ItemType Directory -Path $logDir | Out-Null
}

$date = Get-Date -Format "yyyyMMdd_HHmmss"
$logFile = "$logDir\robocopy_$date.log"

robocopy "C:\Data" "D:\Backup" /LOG:"$logFile"
これならC:\Logフォルダが存在しない場合でも、自動的に作成してからログを保存できます。
タスクスケジューラなどを利用してrobocopyを自動実行する場合にも使いやすい書き方です。

robocopyが成功したか終了コードで確認する

ログを保存するだけでなく、robocopyが正常に終了したかどうかも確認しておくと便利です。robocopyの実行後は、PowerShellの$LASTEXITCODEで終了コードを取得できます。

robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log"

$exitCode = $LASTEXITCODE

Write-Output "robocopy 終了コード:$exitCode"
ここで注意したいのが、robocopyは終了コードが0以外でも、必ずしもエラーとは限らないことです。
一般にrobocopyでは、0~7はコピー状況や差分などを示す正常系の終了コードで、8以上はコピーに失敗したファイルがあることを示します
そのため、PowerShellでは次のように判定できます。
robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log"

if ($LASTEXITCODE -ge 8) {
    Write-Output "robocopyでエラーが発生しました。"
}
else {
    Write-Output "robocopyは正常に終了しました。"
}
「終了コード1だから失敗した」と判断しないように注意してください。

実用例:バックアップして日付付きログを保存する

最後に、ここまでの内容を組み合わせてみます。
次のサンプルでは、

  • バックアップを実行
  • ログフォルダがなければ作成
  • ログファイル名に日時を追加
  • PowerShell画面にも結果を表示
  • robocopyの終了コードを確認

まで行います。

$source = "C:\Data"
$destination = "D:\Backup"
$logDir = "C:\Log"

# ログフォルダがなければ作成
if (-not (Test-Path $logDir)) {
    New-Item -ItemType Directory -Path $logDir | Out-Null
}

# ログファイル名を作成
$date = Get-Date -Format "yyyyMMdd_HHmmss"
$logFile = "$logDir\robocopy_$date.log"

# robocopyを実行
robocopy $source $destination /E /LOG:"$logFile" /TEE

# 終了コードを保存
$exitCode = $LASTEXITCODE

# 実行結果を確認
if ($exitCode -ge 8) {
    Write-Output "バックアップでエラーが発生しました。"
}
else {
    Write-Output "バックアップが終了しました。"
}

Write-Output "ログファイル:$logFile"
実際のバックアップ処理では、このようにコピー処理とログ保存をセットにしておくと、後から実行結果を確認しやすくなります。

PowerShellのOut-Fileとrobocopyの/LOGはどう違う?

PowerShellにはOut-Fileというファイル出力用のコマンドレットもあります。
しかし、robocopyの実行結果を保存するだけなら、robocopy自身が持っている/LOG/LOG+を使用するのが分かりやすいでしょう。
Out-Fileは、PowerShellスクリプト内で独自のメッセージや処理結果をログに残したい場合に便利です。
例えば、

"バックアップ処理を開始しました" |
    Out-File "C:\Log\backup.log" -Append
のように使用できます。

PowerShell全般のログ出力については、関連記事「PowerShellでログを出力する方法|Out-File・追記・日付入りログを解説」も参考にしてください。

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

robocopyのログについてよくある質問

/LOGと/LOG+の違いは?

/LOGは指定したログファイルを上書きし、/LOG+は既存のログファイルに新しい実行結果を追記します。
毎回別のログファイルを作成する場合は/LOG、同じログファイルへ履歴を残していく場合は/LOG+が便利です。

ログを画面にも表示できますか?

できます。
/TEEを追加してください。

robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log" /TEE
これで画面とログファイルの両方に結果が出力されます。

ログファイル名に日付を付けられますか?

PowerShellのGet-Dateを使えば簡単に付けられます。

$date = Get-Date -Format "yyyyMMdd"
この変数をログファイル名に使用します。

robocopyの終了コード1はエラーですか?

robocopyでは、終了コード1は一般的なコマンドのような「失敗」を意味しません。コピーされたファイルがあることを示すコードです。

エラー判定を行う場合は、robocopy特有の終了コードの意味を確認する必要があります。8以上は少なくとも1つのコピー失敗があったことを示します。

まとめ

PowerShellでrobocopyの実行結果をログファイルに保存する場合は、/LOGオプションを使用します。

robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log"
既存のログファイルへ追記する場合は/LOG+を使用します。
robocopy "C:\Data" "D:\Backup" /LOG+:"C:\Log\robocopy.log"
さらにPowerShellのGet-Dateと組み合わせれば、
robocopy_20260910.log
のように日付ごとにログファイルを分けることもできます。

定期的にバックアップを自動実行する場合は、ログを残しておくことで「いつ実行されたのか」「正常にコピーできたのか」「エラーが発生していないか」を後から確認できます。

robocopyでバックアップを行う場合は、コピー処理だけでなくログの保存まで設定しておくと管理しやすくなります。

関連記事:

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

PowerShellでログを出力する方法|Out-File・追記・日付入りログを解説
PowerShellでフォルダをバックアップする方法|robocopyで自動バックアップ
タイトルとURLをコピーしました