VBScriptのFileSystemObject徹底解説と活用法:ファイル操作をマスターしよう

VBScriptは、Windows環境で広く使用されるスクリプト言語で、特にシステム管理や簡単な自動化タスクに役立ちます。

中でも、FileSystemObject(FSO)はファイルやフォルダを操作するための強力なツールです。

本記事では、FileSystemObjectの基本的な操作から応用までを詳細に解説し、実際のスクリプト例を通じてその効果的な活用法を学びます。

FileSystemObjectとは?

FileSystemObject(FSO)は、VBScriptでファイルやフォルダを操作するためのオブジェクトです。

FSOを使用することで、ファイルの作成、読み書き、削除、コピー、移動、フォルダの作成・削除など、様々なファイル操作が簡単に実行できます。

FSOを利用する利点

  • 柔軟で多機能なファイル操作: 1つのオブジェクトで多くのファイル操作が可能。
  • エラーハンドリング: 予期しないエラーに対応し、安定したスクリプトを作成できる。
  • 自動化の可能性: 定期的なタスクを自動化することで、効率的な作業が可能になる。

FileSystemObjectの基本操作

まずは、FSOを使った基本的なファイル操作を見ていきましょう。

FileSystemObjectの作成

FSOを使用するには、まずFSOオブジェクトを作成します。以下のコードで、FSOを初期化できます。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

ファイルの作成

新しいテキストファイルを作成する方法です。CreateTextFileメソッドを使用します。

Dim fso, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.CreateTextFile("C:\testfile.txt", True)
file.WriteLine("これはテストファイルです。")
file.Close

ファイルの読み込み

作成したファイルを読み込むには、OpenTextFileメソッドを使用します。

Dim fso, file, content
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\testfile.txt", 1)
content = file.ReadAll
file.Close
MsgBox content

ファイルの追記

既存のファイルに追記する場合は、OpenTextFileメソッドのモードを2に設定します。

Dim fso, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\testfile.txt", 8) ' 8は追記モード
file.WriteLine("これは追加された行です。")
file.Close

ファイルの削除

不要になったファイルは、DeleteFileメソッドで削除します。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile("C:\testfile.txt")

フォルダの作成と削除

フォルダの作成にはCreateFolder、削除にはDeleteFolderを使用します。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder("C:\TestFolder")
fso.DeleteFolder("C:\TestFolder")

FileSystemObjectの応用操作

FSOを使えば、ファイルやフォルダの操作をさらに高度に制御できます。以下にいくつかの応用例を紹介します。

ファイルのコピーと移動

ファイルを別の場所にコピーまたは移動するには、CopyFileMoveFileメソッドを使用します。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "C:\source.txt", "C:\destination.txt"
fso.MoveFile "C:\source.txt", "C:\newlocation\source.txt"

フォルダのコピーと移動

フォルダ全体をコピーまたは移動する場合は、CopyFolderMoveFolderを使用します。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFolder "C:\SourceFolder", "C:\BackupFolder"
fso.MoveFolder "C:\SourceFolder", "C:\NewLocation\SourceFolder"

フォルダ内のファイルを一覧表示

指定されたフォルダ内のすべてのファイル名を取得するには、Filesコレクションを使用します。

Dim fso, folder, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\TestFolder")
For Each file In folder.Files
    MsgBox file.Name
Next

フォルダ内のサブフォルダを一覧表示

フォルダ内に存在するすべてのサブフォルダの名前を取得するには、SubFoldersコレクションを使います。

Dim fso, folder, subfolder
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\TestFolder")
For Each subfolder In folder.SubFolders
    MsgBox subfolder.Name
Next

ファイルのプロパティ取得

ファイルのサイズや作成日などのプロパティを取得するには、Fileオブジェクトを使用します。

Dim fso, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.GetFile("C:\testfile.txt")
MsgBox "ファイルサイズ: " & file.Size & " バイト"
MsgBox "作成日: " & file.DateCreated

ドライブの情報取得

システム内のドライブに関する情報を取得するには、Drivesコレクションを使用します。

Dim fso, drive
Set fso = CreateObject("Scripting.FileSystemObject")

For Each drive In fso.Drives
    MsgBox "ドライブ名: " & drive.DriveLetter & " - 容量: " & drive.TotalSize & " バイト"
Next

ファイルの検索

指定したフォルダ内で、特定のファイルを検索する方法です。

Dim fso, folder, file, targetFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\TestFolder")
targetFile = "searchfile.txt"

For Each file In folder.Files
    If file.Name = targetFile Then
        MsgBox "ファイルが見つかりました: " & file.Path
        Exit For
    End If
Next

フォルダサイズの計算

指定したフォルダの総サイズを計算する方法です。

Dim fso, folder, totalSize
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\TestFolder")
totalSize = folder.Size
MsgBox "フォルダの総サイズは " & totalSize & " バイトです。"

ファイルシステムのタイプ取得

ドライブのファイルシステムの種類を取得する方法です。

Dim fso, drive
Set fso = CreateObject("Scripting.FileSystemObject")
Set drive = fso.GetDrive("C:\")
MsgBox "ファイルシステムのタイプ: " & drive.FileSystem

エラーハンドリング

ファイル操作では、存在しないファイルを指定したり、アクセス権限がない場所に操作を試みたりすることでエラーが発生することがあります。

これらのエラーを回避するためには、エラーハンドリングが重要です。

VBScriptではOn Error Resume Nextを使ってエラーハンドリングを行います。

On Error Resume Next

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

' 存在しないファイルの削除を試みる
fso.DeleteFile("C:\nonexistentfile.txt")

If Err.Number <> 0 Then
    MsgBox "エラー発生: " & Err.Description
    Err.Clear
End If

On Error GoTo 0

演習問題

学んだ内容を基に、以下の演習問題を解いてみましょう。

演習1:特定拡張子のファイルを検索

指定されたフォルダ内のすべての「.log」ファイルを検索して表示するスクリプトを作成してください。

演習1:解答例
Dim fso, folder, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\TestFolder")

For Each file In folder.Files
    If LCase(fso.GetExtensionName(file.Name)) = "log" Then
        MsgBox "ログファイル: " & file.Name
    End If
Next

演習2:サブフォルダのリスト作成

指定されたフォルダ内のすべてのサブフォルダの名前をリストにして、新しいテキストファイルに書き出すスクリプトを作成してください。

演習2:解答例
Dim fso, folder, subfolder, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\TestFolder")
Set file = fso.CreateTextFile("C:\SubFoldersList.txt", True)

For Each subfolder In folder.SubFolders
    file.WriteLine(subfolder.Name)
Next

file.Close

演習3:特定の文字列を含むファイルの検索

指定されたフォルダ内で、特定の文字列を含むテキストファイルを検索するスクリプトを作成してください。

演習3:解答例
Dim fso, folder, file, content, searchString
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\TestFolder")
searchString = "重要"

For Each file In folder.Files
    If LCase(fso.GetExtensionName(file.Name)) = "txt" Then
        Set fileObj = fso.OpenTextFile(file.Path, 1)
        content = fileObj.ReadAll
        fileObj.Close
        If InStr(content, searchString) > 0 Then
            MsgBox "文字列「" & searchString & "」が見つかりました: " & file.Path
        End If
    End If
Next

まとめ

VBScriptのWScriptオブジェクトは、スクリプトの実行環境を制御するための強力なツールです。

本記事で紹介した基本的なメソッドやプロパティを理解し活用することで、スクリプトをより柔軟かつ効率的に動作させることができます。

演習問題に取り組むことで、実際にWScriptオブジェクトの使い方を試し、その応用力を高めてください。