こんにちは!VBScriptの世界へようこそ。
マクロの記録ボタンを押すだけの世界から一歩踏み出し、「自分の手でシステムをコントロールしたい」と願うあなたを、今日は心から歓迎します。
現場に出て最初に直面する壁、それは「データの保全と自動化」です。手作業でファイルをコピーして、日付ごとのフォルダを作って……そんな退屈でミスしやすい作業は、今日ここで卒業しましょう。
今回は、ファイルシステムオブジェクト(FSO)の至宝である `CopyFolder` と `CopyFile` メソッドを駆使し、堅牢なファイルシステム同期・ミラーリングスクリプトを構築する方法を伝授します。ここをクリアすれば、あなたの業務自動化スキルは間違いなくプロの領域へとランクアップしますよ。
—
なぜ「FSO」なのか?なぜ「VBScript」なのか?
Windows環境において、ファイルのコピーやフォルダの作成を行う手段はいくつかあります。しかし、OSの標準機能だけで軽快に、かつエラーハンドリングを厳密に行いながらバックアップを組む場合、FileSystemObject (FSO) の右に出るものはありません。
特にVBScriptは、追加のインストールや面倒なビルドプロセスが一切不要。メモ帳さえあれば、明日からでも企業の基幹サーバーの片隅で動かせる「縁の下の力持ち」です。その本質を一緒にマスターしていきましょう。
—
コアを理解する:`CopyFolder` と `CopyFile` の作法
バックアップスクリプトの心臓部となるのは、FSOが提供する以下の2つのメソッドです。
1. `CopyFile`: ファイル単位のコピー
2. `CopyFolder`: フォルダ単位(配下のファイル・サブフォルダを含む)のコピー
ここで絶対に外せない最重要ポイントが、第2引数である `OverWrite`(上書きフラグ) です。
fso.CopyFile “C:\Source\data.txt”, “D:\Backup\data.txt”, True
この最後の `True`、これが命綱です。
- `True` を指定すると、宛先に同名ファイルが存在する場合、問答無用で上書きします。
- `False` を指定すると、同名ファイルが存在した時点でエラー(実行時エラー)が発生してスクリプトが停止します。
ミラーリング(同期)を目的とするバックアップであれば、基本的には `True` を選択して最新の状態に上書きしていくのが定石です。
—
実践!堅牢なバックアップ・ミラーリングスクリプト
それでは、実務でそのまま使えるレベルにまで昇華させた、完全版のバックアップスクリプトを公開します。
エラー処理(トラップ)を組み込み、ログ出力の概念を取り入れた、先輩エンジニアお墨付きのコードです。
メモ帳を開き、以下のコードを貼り付けて `backup.vbs` という名前で保存してください。
‘ =================================================================0
‘ スクリプト名: SimpleMirrorBackup.vbs
‘ 概要: 指定したソースフォルダをバックアップ先に丸ごとコピー(同期)する
‘ 著者: シニアアーキテクトからのエール
‘ =================================================================0
Option Explicit
Dim fso, srcPath, dstPath
Dim startTime
‘ — 1. パスの設定(環境に合わせて書き換えてください) —
srcPath = “C:\MyWork\SourceFolder” ‘ バックアップ元のパス
dstPath = “D:\MyWork\BackupFolder” ‘ バックアップ先のパス
‘ 計測開始
startTime = Now
WScript.Echo “=== バックアップ処理を開始します ===”
‘ — 2. FileSystemObject の生成 —
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ — 3. 事前チェック(元フォルダが存在するか?) —
If Not fso.FolderExists(srcPath) Then
WScript.Echo “【致命的エラー】バックアップ元のフォルダが存在しません: ” & srcPath
WScript.Quit 1
End If
‘ — 4. バックアップ先フォルダの存在確認・自動生成 —
If Not fso.FolderExists(dstPath) Then
‘ 宛先がなければ新規作成する
fso.CreateFolder(dstPath)
WScript.Echo “バックアップ先フォルダを新規作成しました: ” & dstPath
End If
‘ — 5. 実行:フォルダのコピー(ミラーリング) —
On Error Resume Next ‘ 万が一のエラーでスクリプトが即死するのを防ぐ
‘ 第1引数: コピー元, 第2引数: コピー先, 第3引数: 上書き許可(True)
fso.CopyFolder srcPath & “\”, dstPath, True
If Err.Number <> 0 Then
WScript.Echo “【エラー発生】コピー中に問題が発生しました: ” & Err.Description
Err.Clear
WScript.Quit 2
Else
WScript.Echo “SUCCESS: フォルダの同期が正常に完了しました。”
End If
On Error GoTo 0 ‘ エラー監視を元に戻す
‘ — 6. 後片付け —
Set fso = Nothing
WScript.Echo “処理時間: ” & DateDiff(“s”, startTime, Now) & ” 秒”
WScript.Echo “=== すべての処理が終了しました ===”
—
コードの急所と、初心者が陥りやすい罠
上記のコードには、現場で生き残るための「知見」がぎっしり詰まっています。いくつか重要なポイントを解説します。
1. `srcPath & “\”` という魔法の記述
`CopyFolder` メソッドを使う際、単に `fso.CopyFolder srcPath, dstPath, True` と書くと、「フォルダごと」宛先の中にドスンと格納されます(例: `D:\BackupFolder\SourceFolder` という二重構造になる)。
しかし、私たちがミラーリングしたいのは「フォルダの中身」ですよね。そのため、パスの末尾に `\` を付与し、「直下のファイルとサブフォルダ群すべて」を対象に指定しています。このテクニックは絶対に覚えておいてください。
2. `On Error Resume Next` による防壁
ファイルシステムを扱うスクリプトの最大の敵は、「コピー中のファイルが別アプリで開かれていてロックされている」といった外部要因です。
エラー対策をせずに実行すると、その瞬間にスクリプトが強制終了し、ユーザーに不親切なエラーダイアログが突きつけられます。あえてエラーをトラップし、`Err.Number` をチェックして優しくハンドリングするのが、プロの仕事というものです。
3. `Option Explicit` の絶対遵守
変数の宣言を強制するこのお呪いは、VBScriptを書く上での「大原則」です。スペルミスによるバグ(例: `dstPath` と書くべきところを `dastPath` と書いてしまう等)を未然に防ぎ、コードの品質を劇的に引き上げます。
—
さらに上のステージへ:タスクスケジューラとの連携
ここまで書いたVBScriptは、手動でダブルクリックして実行するだけではもったいないです。
Windowsの「タスクスケジューラ」にこの `backup.vbs` を登録し、「毎日夜の20時に自動実行する」「PC起動時にバックアップ走らせる」といった設定を行えば、真の「完全自動化システム」が完成します。
コマンドプロンプトから `cscript.exe` を使ってサイレント実行させることも可能です。
cscript //nologo C:\MyWork\backup.vbs
※ `//nologo` をつけると、余計なMicrosoftの著作権表示が出なくなるため、ログをファイルに出力する際などに非常に重宝します。
—
おわりに
お疲れ様でした!
今回は `CopyFolder` と `CopyFile` を通して、VBScriptによるファイルシステムの制御とミラーリングの概念を解説しました。
「たかがファイルのコピー」と思うかもしれませんが、ここにはオブジェクトの概念、例外処理、パスの結合規則など、プログラミングのあらゆるエッセンスが凝縮されています。
ここをクリアしたあなたなら、もうVBScriptの基本はバッチリです。自信を持って、日々の業務の自動化に挑んでください。あなたのエンジニアライフが、よりスマートで創造的なものになることを応援しています!
