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"
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"
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"
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~7はコピー状況や差分などを示す正常系の終了コードで、8以上はコピーに失敗したファイルがあることを示します。
そのため、PowerShellでは次のように判定できます。
robocopy "C:\Data" "D:\Backup" /LOG:"C:\Log\robocopy.log"
if ($LASTEXITCODE -ge 8) {
Write-Output "robocopyでエラーが発生しました。"
}
else {
Write-Output "robocopyは正常に終了しました。"
}
実用例:バックアップして日付付きログを保存する
最後に、ここまでの内容を組み合わせてみます。
次のサンプルでは、
- バックアップを実行
- ログフォルダがなければ作成
- ログファイル名に日時を追加
- 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"
Get-Dateと組み合わせれば、robocopy_20260910.log
定期的にバックアップを自動実行する場合は、ログを残しておくことで「いつ実行されたのか」「正常にコピーできたのか」「エラーが発生していないか」を後から確認できます。
robocopyでバックアップを行う場合は、コピー処理だけでなくログの保存まで設定しておくと管理しやすくなります。
関連記事: 【PowerShell】robocopyコマンドを使う方法 PowerShellでログを出力する方法|Out-File・追記・日付入りログを解説 PowerShellでフォルダをバックアップする方法|robocopyで自動バックアップ
