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を使えば、ファイルやフォルダの操作をさらに高度に制御できます。以下にいくつかの応用例を紹介します。
ファイルのコピーと移動
ファイルを別の場所にコピーまたは移動するには、CopyFileとMoveFileメソッドを使用します。
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "C:\source.txt", "C:\destination.txt"
fso.MoveFile "C:\source.txt", "C:\newlocation\source.txt"
フォルダのコピーと移動
フォルダ全体をコピーまたは移動する場合は、CopyFolderとMoveFolderを使用します。
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オブジェクトの使い方を試し、その応用力を高めてください。