Windows10でRobocopyを使ったバッチファイルを作成してみた

2016年6月8日Windows関連,パソコン関連Windows,Windows10,パソコン

仕事でバックアップ用のバッチファイルを作成することになった。

調べて見たらrobocopyという新しいコマンドを確認。実際に作ってみた物をまとめてみた。

スポンサーリンク

robocopyでやりたかった事

やりたかった事は以下。

  • OSの64/32bitをチェックして挙動を変える
  • 特定のフォルダーからファイルを持ってきて上書きする
  • レジストリを取得して持ってきたフォルダーに返す

で、COPYかXCOPYかなー、後はどんなコマンド使うのかなぁと思ってたらRobocopyと言うコマンドが新しく追加されているそうな。

調べてみるとバックアップ用の新しいコマンドで結構複雑なこともできるみたい。

robocopyの使い方

だいぶRobocopyの使い方は以下。

robocopy [スイッチ] [コピー元のフォルダー] [コピー先のフォルダー] [ファイル名]

で、ファイルだけ処理したい場合はフォルダーの指定した後にファイル名を書くそうな。

さらにデフォルトは「*.*」だそうなのでフォルダーの中身全部となる。ワイルドカードは使えるが複数の特定の拡張子のみ処理したい場合は「*.jpg」の様に拡張子毎に書く必要がある。

バッチファイルを作成

[ ]の部分は適当に当て込んだものなので、もし使うなんて奇特な方は[]ごと適切な値に差し替えてください。

バッチファイルは「レジストリとプログラムファイルにある特定フォルダのファイルのタイムスタンプを取得してファイルに書き出す」という事をしている。

荒いが面倒くさかったので以下の内容で完成とした。

一応補足的な物。

細かい事1:レジストリの値から特定の値を取りたい場合はregコマンドでとれる
細かい事2:AMD64は64bitのWindows、x86は32bitのWindowsを指す
細かい事3:Program Filesの短い名前は64bitOSだとC:\Progra~2、32bitOSだとC:\Progra~1になる
細かい事4:このバッチファイルはProgram Filesをいじるので管理者権限で実行しないと止まる
細かい事5:robocopyの書き方はちょっと混乱したがなぜかは不明

@echo off
set bit=%PROCESSOR_ARCHITECTURE%
set IP=[\\192.168.0.1\コピー元]
FOR /F “TOKENS=1,2,*" %%A IN ('REG QUERY “HKCU\SOFTWARE\[HOGE]" /v “[OGE]"') DO IF “%%A"=="[OGE]" SET [OGE1]=%%C
FOR /F “TOKENS=1,2,*" %%A IN ('REG QUERY “HKCU\SOFTWARE\[HOGE]" /v “[ABESHI]"') DO IF “%%A"=="[ABESHI]" SET [ABESHI2]=%%C
FOR /F “TOKENS=1,2,*" %%A IN ('REG QUERY “HKCU\SOFTWARE\[HOGE]" /v “[HIDEBU]"') DO IF “%%A"=="[HIDEBU]" SET [HIDEBU3]=%%C
reg export HKCU\SOFTWARE\[HOGE] C:\app\%[OGE1]%%[ABESHI2]%%[HIDEBU3]%.reg /y
robocopy /Z /XO /XX /np /r:3 /log:reg.txt “C:\app" “%IP%\reg" FILE %[OGE1]%%[ABESHI2]%%[HIDEBU3]%.reg
if %bit%==AMD64 (
goto shori64
) else (
goto shori32
)
:shori64
echo (64bit)
robocopy /Z /XO /XX /np /r:3 /log:[log1].txt “%IP%\[log1]" “C:\Progra~2\[log1]" FILE [log1].exe
robocopy /Z /XO /XX /np /r:3 /log:[log2].txt “%IP%\[log2]" “C:\Progra~2\[log2]" FILE *.dll
robocopy /Z /XO /XX /np /r:3 /log:[log3].txt “%IP%\[log3]" “C:\Progra~2\[log3]" FILE *.exe FILE *.dll
robocopy /Z /XO /XX /np /r:3 /log:[log4].txt “C:\app" “%IP%\reg" FILE *.txt
exit /b
:shori32
echo (32bit)
robocopy /Z /XO /XX /np /r:3 /log:[log1].txt “%IP%\[log1]" “C:\Progra~1\[log1]" FILE [log1].exe
robocopy /Z /XO /XX /np /r:3 /log:[log2].txt “%IP%\[log2]" “C:\Progra~1\[log2]" FILE *.dll
robocopy /Z /XO /XX /np /r:3 /log:[log3].txt “%IP%\[log3]" “C:\Progra~1\[log3]" FILE *.exe FILE *.dll
robocopy /Z /XO /XX /np /r:3 /log:[log4].txt “C:\app" “%IP%\reg" FILE *.txt
exit /b

ここまでをテキストファイルに書いて、拡張子を「.bat」とすれば完成。

おわりに

このコマンドでHDDとNASの同期取れる様にやってみようかなと思っている。

タスクスケジューラを活用する形になるがPCの引越時がとても面倒くさいので躊躇してる今日この頃。

スポンサーリンク