ROBOCOPY とタスクスケジューラーでお手軽バックアップ

「デスクトップのファイルを自動的に社内のファイルサーバーに保存する方法が無いか」と聞かれたの「 ROBOCOPY 」コマンドを活用して、「VBScript」と「バッチファイル」、「タスクスケジューラー」を使ってサクッと作ってみました(^ ^)

ファイルサーバーへアクセス出来るか確認する

対象のPCが持ち運び用のノートPCだったので、まずファイルサーバーにアクセス出来るか確認して条件を分岐します。
ファイルサーバーのIPアドレスは「192.168.0.20」です。

@echo off

ping 192.168.0.20 -n 3 | find “=32”
@if errorlevel 1 GOTO PING_NG
@if errorlevel 0 GOTO PING_OK

:PING_OK
rem **********
rem ここに処理を記述する
rem **********
GOTO END

:PING_NG
GOTO END

:END

「ROBOCOPY」で差分コピー

今回はタスクスケジューラーで2時間に1回実行する予定なのでコピーは差分で実行します。
バックアップ先となるファイルサーバーのフォルダは「¥¥192.168.0.20¥daisuke¥backup」です。
まずはネットワークドライブとして接続

net use G: ¥¥192.168.0.20¥daisuke

ユーザー名とパスワードが必要な場合は

net use G: \\192.168.0.20\daisuke [パスワード] /user:[ユーザー名]


接続したら「 ROBOCOPY 」
ノートPCは「Windows8.1」でログインしているユーザーは「daisuke」です。

robocopy C:¥Users¥daisuke¥Desktop G:¥backup /MIR /XO /XA:SH /R:0 /W:0 /XF *.lnk

/MIR
・・・ ディレクトリツリーをミラー化します。
     (コピー元にないファイル・フォルダは削除されます。)
/XO
・・・ 古いファイルを除外します。
     (更新されていないファイルを除外)
/XA:[RASHCNETO]
・・・ 指定されたいずれかの属性が設定されているファイルを除外します。
     (隠しファイルとシステムファイルを除外)
/R:n
・・・ 失敗したコピーに対する再試行数: 既定値は 1,000,000。
     (実行しないので”0″)
/W:n
・・・ 再試行と再試行の間の待機時間: 既定値は、30 秒です。
     (実行しないので”0″)
/XF file [ファイル]…
・・・ 指定された名前/パス/ワイルドカードに一致するファイルを除外します。
     (リンクを除外)

VBScriptから実行する

使用中にバッチファイルの小窓が出ると困るのでVBScriptから実行します。
何か追記、修正するときにVBScriptとバッチファイル両方を確認するのは面倒なのでバッチファイルもVBScriptで作ります。
細かい説明は省きますが、全体としてはこんな感じ。

Dim objFileSys
Dim objOutFile
Dim objShell

Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objOutFile = objFileSys.OpenTextFile("C:\mips\mipsrobo.bat",2,True)
    objOutFile.WriteLine "@echo off"
    objOutFile.WriteLine "ping 192.168.0.20 -n 3 "
    objOutFile.WriteLine "@if errorlevel 1 GOTO PING_NG"
    objOutFile.WriteLine "@if errorlevel 0 GOTO PING_OK"
    objOutFile.WriteLine ":PING_OK"
    objOutFile.WriteLine "cd c:\mips"
    objOutFile.WriteLine "net use G: /delete /yes"
    objOutFile.WriteLine "net use G: \\192.168.0.20\daisuke"
    objOutFile.WriteLine "robocopy C:\Users\daisuke\Desktop G:\backup /MIR /XO /XA:SH /R:0 /W:0 /XF *.lnk /LOG+:mipsrobo.log"
    objOutFile.WriteLine "net use G: /delete /yes"
    objOutFile.WriteLine "GOTO END"
    objOutFile.WriteLine ":PING_NG"
    objOutFile.WriteLine "echo ------------------------------------------------------------------------------- >>C:\mips\mipsrobo.log"
    objOutFile.WriteLine "date /T >>C:\mips\mipsrobo.log"
    objOutFile.WriteLine "time /T >>C:\mips\mipsrobo.log"
    objOutFile.WriteLine "echo ** 実行できませんでした。 **  >>C:\mips\mipsrobo.log"
    objOutFile.WriteLine "echo ------------------------------------------------------------------------------- >>C:\mips\mipsrobo.log"
    objOutFile.WriteLine "GOTO END"
    objOutFile.WriteLine ":END"
objOutFile.Close
Set objFileSys = Nothing
Set objOutFile = Nothing

On Error Resume Next
  Set objShell = WScript.CreateObject("WScript.Shell") 
  objShell.RUN "C:\mips\mipsrobo.bat",0
On Error GoTo 0

Set objShell = Nothing

こちらのスクリプトは「C:¥mips」というフォルダに「mipsrobo.vbs」という名前で保存しました。

タスクスケジューラーに登録

今回は折角なので登録もコマンドで。
コマンドプロンプトで以下のコマンドを実行します

schtasks /create /sc minute /mo 120 /tn DesktopBackup /tr “C:\mips\mipsrobo.vbs” /st 06:30:00 /ru daisuke /rp [パスワード]

/create
・・・ スケジュール タスクを新しく作成します。
/sc スケジュール
・・・ スケジュールの頻度を指定します。
/mo 修飾子
・・・ スケジュールの種類を詳細に指定して、スケジュールの頻度に関してより細かな制御を行います。
/tn
・・・ タスク名を入力します。
/tr
・・・ 実行するスクリプトのパスとファイル名です。
/st
・・・ 開始する時間を指定します。
/ru
・・・ タスクの実行に使うユーザー名です。
/rp
・・・ /ruで指定したユーザーのパスワードです。

応援よろしくお願いします。
いいね ! してもらえると嬉しいです。

Twitter で

自己紹介

松田 大 と申しますm(_ _)m
インディーズでミュージシャンをやっていたのですがいつのまにか...

とある企業でショップのアルバイトスタッフから正社員、支店長を経てシステム部門に異動するという、開発担当としては変わった経緯を持っている方だと思います。

一昨年の3月に結婚し、尻敷かれ男子の仲間入りを果たしました(笑)

現在勤めているJTクラウドシステムでは、「 WordPress 」を活用したWEBサイト、業務用WEBアプリケーション開発「 Excel VBA 」を活用した効率化ツールの開発を中心に「 ネットワーク・サーバー構築 」や「 Office365製品の導入支援 」、最近は、ホームページ制作に加え、記事の執筆代行や掲載に必要な情報のリサーチ、映像のテロップ入れや切りはりなどの簡単な動画編集なども、まとめて行なっています。

お問い合わせはJTクラウドシステムホームページからお願いします。
スポンサーリンク