ROBOCOPYによるファイルバックアップ
Windows で NAS 等に D ドライブの内容をバックアップしたい。
既存のフリーウェアや xcopy ではロングファイル名で取りこぼしがあるため robocopy でバッチ処理する。
以下、サンプルスクリプト。
- コピー元、コピー先は適宜変更のこと。
- 除外ディレクトリ、除外ファイルも適宜変更のこと。
rem rem ROBOCOPYによるバックアップ rem rem rem タイムスタンプ生成 rem set myTIME=%time: =0% set myTIME=%myTIME::=% set myTIME=%myTIME:~,6% set myTIME=%date:/=%_%myTIME% rem 1)システム関数 %time% で出力される文字列から空白を 0 に置換する rem 2)コロン : を除去する rem 3)先頭から 6 文字を取得する rem 4)日付関数 %date% から / を除去し、3)の時間文字列と連結する rem rem LOGファイルの保管ディレクトリ rem set myPATH="C:\temp\log" rem rem LOGファイル指定 rem set LOG="%myPATH%\%myTIME%_robocopy.log" rem rem 開始日時をログに記録 rem echo **********>>%LOG% echo Start...%date%, %time%>>%LOG% echo **********>>%LOG% rem rem オプション指定 rem set OPT=/ZB /DCOPY:T /MIR /XA:SH /XO /R:0 /W:0 /NP /NDL /V /TEE /LOG+:%LOG% set OPT=%OPT% /XD "$RECYCLE.BIN" "RECYCLER" "System Volume Information" "Temp" "Temporary Internet Files" "Searches" ".*" set OPT=%OPT% /XF "Thumbs.db" "desktop.ini" "ntuser.dat*" "*.tmp" ".*" "folder.ico" "*.*~" "*.search-ms" "~$*" rem /ZB :: 再起動可能モードを使用します。アクセスが拒否された場合、バックアップ モードを使用します。 rem /DCOPY:T :: ディレクトリ タイムスタンプをコピーします。 rem /MIR :: ディレクトリ ツリーをミラー化します (/E および /PURGE と同等) rem /XA:[RASHCNETO] :: 指定されたいずれかの属性が設定されているファイルを除外します。 rem S システムファイル属性 rem H 隠しファイル属性 rem /XO :: 古いファイルを除外します。(改変が無いファイルを除外する) rem /R:n :: 失敗したコピーに対する再試行数: 既定値は 1,000,000。 rem /W:n :: 再試行と再試行の間の待機時間: 既定値は、30 秒です。 rem /NP :: 進行状況なし - コピーの完了率を表示しません。 rem /NDL :: ディレクトリ名をログに記録しません。 rem /V :: スキップされたファイルを示す詳細出力を作成します。 rem /TEE :: コンソール ウィンドウとログ ファイルに出力します。 rem /LOG+:ファイル :: ログ ファイルに状態を出力します (既存のログファイルに追加します)。 rem /XD ディレクトリ [ディレクトリ]... :: 指定された名前/パスに一致するディレクトリを除外します。 rem /XF ファイル [ファイル]... :: 指定された名前/パス/ワイルドカードに一致するファイルを除外します。 rem rem コピー元 rem set ORG=D:\. rem rem コピー先 rem set DST=X:\hoge rem rem コマンド実行 rem robocopy %ORG% %DST% %OPT% rem rem 隠しフォルダ対策 rem attrib -H -S %DST% rem robocopyをするとコピー先フォルダが隠し属性となる不具合があるため、 rem 強制的に隠し属性を解除するもの rem rem 終了日時をログに記録 rem echo **********>>%LOG% echo End...%date%, %time%>>%LOG% echo **********>>%LOG% rem rem ログローテート rem rem 残したいログの個数 set myNUM=5 rem 削除したいログファイル set myDelFile=%myPATH%\*.log rem 削除コマンドを実行 for /f "skip=%myNUM%" %%F in ('dir %myDelFile% /b /s /o-D') do del %%F rem EOF