「デスクトップのファイルを自動的に社内のファイルサーバーに保存する方法が無いか」と聞かれたの「 ROBOCOPY 」コマンドを活用して、「VBScript」と「バッチファイル」、「タスクスケジューラー」を使ってサクッと作ってみました(^ ^)
ファイルサーバーへアクセス出来るか確認する
対象のPCが持ち運び用のノートPCだったので、まずファイルサーバーにアクセス出来るか確認して条件を分岐します。
ファイルサーバーのIPアドレスは「192.168.0.20」です。
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」です。
まずはネットワークドライブとして接続
ユーザー名とパスワードが必要な場合は
接続したら「 ROBOCOPY 」
ノートPCは「Windows8.1」でログインしているユーザーは「daisuke」です。
/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」という名前で保存しました。
タスクスケジューラーに登録
今回は折角なので登録もコマンドで。
コマンドプロンプトで以下のコマンドを実行します
/create
・・・ スケジュール タスクを新しく作成します。
/sc スケジュール
・・・ スケジュールの頻度を指定します。
/mo 修飾子
・・・ スケジュールの種類を詳細に指定して、スケジュールの頻度に関してより細かな制御を行います。
/tn
・・・ タスク名を入力します。
/tr
・・・ 実行するスクリプトのパスとファイル名です。
/st
・・・ 開始する時間を指定します。
/ru
・・・ タスクの実行に使うユーザー名です。
/rp
・・・ /ruで指定したユーザーのパスワードです。
自己紹介
インディーズでミュージシャンをやっていたのですがいつのまにか…
とある企業でショップのアルバイトスタッフから正社員、支店長を経てシステム部門に異動するという、開発担当としては変わった経緯を持っている方だと思います。
「Excel VBA」からスタートして、Yamaha RTX シリーズで VPN環境構築、Hyper-V環境構築、Windowsアプリ開発などを経験した後、「 WordPress 」に出会い、どっぷりハマっています。
現在勤めているETBS合同会社では、「 WordPress 」を活用したWEBサイト、業務用WEBアプリケーション開発を中心に、記事の執筆代行や掲載に必要な情報のリサーチ、映像のテロップ入れや切りはりなどの簡単な動画編集なども、まとめて行なっています。
宮崎県 都城市 出身。東京都 葛飾区 在住。現在、代表兼二児のパパ。子育てを通じて、こどもたちにもプログラミングの楽しさに触れてほしいと思うようになり、「 こどもICTかつしか教室 」を開講中。最近は童心に帰り、簡単なゲーム制作なんかも楽しんでいます(^_^)。







コメントを残す