外付けHDDにDドライブにある特定のフォルダだけバックアップをとる

IT知識

Windowsにもともと備わっているrobocopyコマンドを使い、あらかじめバックアップしたいフォルダ名を記述したバッチファイルを作成しておきダブルクリック1発でバックアップできるようにした。

作った理由

バックアップについては、いくつか専用アプリを試した。
しかし、年に1回くらいしかバックアップをとらないので、使い方を忘れてしまう。

わたしは自分が使うWindowsパソコンは、基本的に元からあるCドライブをパーティション分割してCドライブDドライブとして使っている。

CドライブWindows他、インストールしたアプリの保管
Dドライブバックアップ対象の作成したファイルや写真など

バックアップは、基本的にDドライブの中身だけ、という形にシンプルにしたいためのパーティション分割なのだ。

パソコンの中身を全てバックアップする人もいるが、時間が掛かるし記憶装置の容量も沢山必要になる。無駄だ。

robocopyを使うメリット

バックアップするときは、バッチファイルをダブルクリックするだけなので、1年に1回でも使い方を忘れることはない。

なお、差分バックアップになるので、コピー先とコピー元の日付が同じであればスキップされる。よって同じ対象フォルダであれば2回目からのバックアップ時間は短縮できる。

バックアップ用バッチファイル

backup.bat(文字コードはShift-JISで保存。メモ帳の場合はANSI)

@echo off
setlocal enabledelayedexpansion

rem ===== 設定(ここだけ書き換えればOK)=====
set SRC=D:\
set DST=E:\BackUp
set FOLDERS=aviutl claude work
rem =========================================

for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd"') do set DT=%%i
set LOG=%DST%\backup_log_%DT%.txt

echo ============================================
echo  バックアップ
echo ============================================
echo コピー元 : %SRC%
echo コピー先 : %DST%\
echo 対象     : %FOLDERS%
echo.

rem --- コピー先ドライブの確認 ---
if not exist %DST:~0,3% (
    echo [エラー] %DST:~0,3% が見つかりません。USB HDD を接続してください。
    pause
    exit /b
)

rem --- コピー元フォルダの確認 ---
for %%F in (%FOLDERS%) do (
    if not exist "%SRC%\%%F" (
        echo [エラー] コピー元が見つかりません: %SRC%\%%F
        pause
        exit /b
    )
)

choice /c yn /m "バックアップを開始します"
if errorlevel 2 goto :cancel

rem --- コピー先の親フォルダを先に作る(ログ出力先の確保)---
if not exist "%DST%" mkdir "%DST%"

set MAXCODE=0
for %%F in (%FOLDERS%) do (
    echo.
    echo --- %%F をコピー中 ---
    robocopy "%SRC%\%%F" "%DST%\%%F" /E /DCOPY:DAT /R:1 /W:1 /XJ /NP /NFL /NDL /LOG+:"%LOG%"
    if !errorlevel! gtr !MAXCODE! set MAXCODE=!errorlevel!
)

echo.
echo ============================================
if !MAXCODE! geq 8 (
    echo [警告] エラーが発生しました。終了コード: !MAXCODE!
    echo ログを確認してください: %LOG%
) else (
    echo 正常終了しました。終了コード: !MAXCODE!
)
echo ============================================
goto :end

:cancel
echo 中止しました。

:end
echo.
pause

設定部分

設定は以下の3行の部分

rem ===== 設定(ここだけ書き換えればOK)=====
set SRC=D:\
set DST=E:\BackUp
set FOLDERS=aviutl claude work
rem =========================================
SRCコピー元フォルダ
DSTコピー先フォルダ(バックアップ先)
FOLDERSコピー元フォルダにあるバックアップしたいフォルダ名を半角スペースで区切って複数入力できる
※このバッチファイルのままではスペースを含むフォルダ名には対応していないので注意が必要!

上記の例ではD:¥の配下にあるaviutlclaudeworkの3つのフォルダ内容がE:\BackUpフォルダ配下にバックアップ(コピー)される。

バックアップログ

バックアップログが日時形式で保存される。
前述の設定であればE:¥BackUp¥backup_log_2026-08-11.txtなどとして保存される。

ログにはバックアップ元(FOLDERS=…)に設定したフォルダ毎に

-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

開始: 2026年8月11日 17:37:44
コピー元 : D:\work\
コピー先 : E:\BackUp\

ファイル: *.*

オプション: *.* /NDL /NFL /S /E /DCOPY:DAT /COPY:DAT /NP /XJ /R:1 /W:1

------------------------------------------------------------------------------


------------------------------------------------------------------------------

合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 432 0 432 0 0 0
ファイル: 7143 0 7143 0 0 0
バイト: 4.106 g 0 4.106 g 0 0 0
時刻: 0:19:26 0:19:04 0:00:03 0:00:19
終了: 2026年8月11日 17:37:45

などと保存され、コピーに失敗したかどうかやバックアップに掛かった時間(時刻)などが分かるようになっている。

コメント

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