windowsに付属のコピーツール
windows内にフォルダに溜まったデータを別のマシンに移したいとき
windowsのタスクスケジューラ(taskschd.msc)にて
「X:」ドライブの内容を ネットワークドライブ「Q:」に丸ごとコピーするなら
タスク名: CopyEMdata2QNAP
Author: GATANCUSTOMER \ VALUEDGATANCUSTOMER $admin
Action: C:\Windows\System32\Robocopy.exe
引数: X: Q: /s /e LOG:"C:\Users\VALUEDGATANCUSTOMER\Desktop\QNAPBackupLog\Robocopy.log" /xd "System Volume Information" "`$RECYCLE.BIN" ".@__thumb"
/xdでコピーしないフォルダを指定してます
/s は「中身が空っぽのフォルダ」は無視(スキップ)
/s は「中身が空っぽのフォルダ」も含めて、すべてのフォルダ構造を完全にコピー /s と /e が共存したら /e が優先
LOG: はその実行時のログを記載
LOG+: はログファイルが追記モードで、どんどん大きくなります
/UNILOG: ログファイル名がUSF-8になる。ログファイルのコンテンツも文字コードはUTF-16 LE(BOM付き)
(LOG:はファイル名はsjis,コンテンツもsjis)
もしログファイルに日付を入れるなら
:: 現在の日付を YYYY-MM-DD の形式で取得
set TODAY=%date:~0,4%-%date:~5,2%-%date:~8,2%
set LOG_FILE="C:\RobocopyLogs\%TODAY%.txt"
「最上位の特権で実行する」は「管理者権限(UACをパスした状態)」でプログラムを起動させる.
重要な変更を行うときだけ「許可しますか?」と画面が暗くなる仕組み(UAC)を抜けて実行する.
でも「タスクの実行時に使うユーザアカウント」が基本でそのユーザで権限でアクセスする
基本的な使い方
robocopy "C:\Source" "D:\Backup" /E /DCOPY:DA /COPY:DAT /R:1 /W:3 /MT:8
/E -> 空フォルダを含むすべてのサブフォルダをコピー
/DCOPY:DA -> フォルダのタイムスタンプと属性を維持
/COPY:DAT -> ファイルのデータ、属性、タイムスタンプをコピー
/R:1 /W:3 -> エラー時のリトライを「1回」、待ち時間を「3秒」に制限
/MT:8 -> 8スレッドのマルチスレッドで高速処理(最大128)
これを実行後に、Source内のファイルが消えても、Backup側には影響しない。同時に削除されない。
robocopy "C:\Source" "D:\Backup" /MIR /DCOPY:DA /R:1 /W:3
/MIR -> ミラーリングを行う(/E と /PURGE の組み合わせ)
Source内の内容に忠実なので、Source内のファイルが消えれば、処理後にBackup側もそもファイルが消える
(そうなると、Sourceが空のフォルダなら、Backup側も空のフォルダになる)
robocopy "C:\Source" "D:\Backup" /MIR /L
/L -> ドライラン. 実際の処理はしないけど、なにがどのような処理が行われるかを提示します
robocopy "U:\" "Z:\" /MIR /DCOPY:DA /R:3 /W:5 /MT:8 /FFT /XJD /XJF
/FFT -> ネットワークドライブを対象とする際は「/FFT」を入れてファイルのタイムスタンプが多少ズレても同じと見做させる
/XJD /XJF -> Windowsの特殊なリンク(接合点)を無視し、コピーが無限ループに陥るのを防ぎます。
robocopy "D:\data\sample" "Z:\backup" /E
フォルダの末尾に"\"を設けない。 rsync なら挙動が変化してしまうが、robocopyは指定不要