読者です 読者をやめる 読者になる 読者になる

DuKiccoの雑記

My Life Is Myself

【robocopyコマンドでフォルダーをバックアップ/同期する】【エクセル2013,VBA】

VBA エクセル

robocopywindows vista以降に装備されているコマンドで通常はコマンドプロンプトから使いますが、VBAから使ってみます。robocopyは「Robust File Copy」の略で、堅牢(robust)かつ確実なファイルのコピーという意味になります。

ファイルやフォルダのコピーにはいろいろな方法がありますが、robocopyは堅牢(?)で、オプションも豊富、コピーにかかる時間自体も短くて済むのでおすすめです。

robocopy
https://technet.microsoft.com/ja-jp/library/cc733145(v=ws.10).aspx
https://technet.microsoft.com/ja-jp/magazine/ee851678.aspx

/mirオプションの説明
コピー元のフォルダーとコピー先の内容が同一となる。差分バックアップ
1.作成日時やファイルサイズの異なるファイルは上書きされる。
2.コピー先に存在しないファイルやフォルダは新たに作成される。
3.コピー元に存在しないファイルはコピー先から削除される。
コピー先から削除したくない場合はオプションを/s(サブフォルダーのコピー)とする。

コピー元とコピー先を間違うと消えてしまうので、事前に十分練習してください。

Sub RunRoboCopy1()
 
Dim WSH, wExec, sCmd As String, Result As String
Dim FF As String, TF As String
 
FF = "C:\temp\コピー元" 'コピー元フォルダのパス
TF = "C:\temp\コピー先" 'コピー先フォルダのパス
 
    Set WSH = CreateObject("WScript.Shell")
 
 
    sCmd = "robocopy " & FF & " " & TF & " /mir" '/mir→ミラオプションでバックアップ
 
    Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) 'コマンドの実行
 
 
    Do While wExec.Status = 0  'コマンドが終了したか確認
        DoEvents
    Loop
 
    Result = wExec.StdOut.ReadAll '結果の取得
    Debug.Print Result '結果の表示
 
    Set wExec = Nothing
    Set WSH = Nothing
 
 
End Sub

イミディエイト ウィンドウに表示された結果。コピー・上書きファイル数などが表示される。
f:id:DuKicco:20160612014851j:plain