こんにちは、ふみです。みなさんは VBScript のプログラムを実行した時に「指定したファイルが見つかりません。」というエラーが発生したことがありますか?
全てのプログラムに共通することですが、ファイルを指定する前にそのファイルの存在を確認しておくと、指定したファイルが見つからないエラーを回避することができます。
今回は VBScript でファイルやフォルダの存在を確認する方法について紹介します。
CONTENTS
ファイルの存在を確認する
ここでは Windowsアクセサリのペイントのプログラムファイルの存在を確認します。
ファイルの存在を確認する VBScript のプログラムは次のとおりです。
サンプルコード
Option Explicit Dim objFSO, strText Const c_strFilePath = "C:\Windows\System32\mspaint.exe" Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(c_strFilePath) = True Then strText = "存在します" Else strText = "存在しません" End If Set objFSO = Nothing MsgBox "ファイル" & vbCrLf _ & c_strFilePath & vbCrLf _ & "は" & strText
上記のコードを Windows 10 のアクセサリから開いたメモ帳へコピー&ペースト後、文字コードを「ANSI」に設定し、適当なファイル名に拡張子「.vbs」を付けてデスクトップ等に保存すると、すぐに動作確認できます。
保存した vbsファイルをダブルクリックすると、4行目の定数で指定したパスにペイントのプログラムが存在した時に「~は存在します」のメッセージが表示されます。
解説
3行目の Dim は2つの変数を宣言しています。このプログラムは1行目の Option Explicit で変数の宣言を強制しているので、この2つ以外の変数を使用するとエラーが発生します。
4行目の定数「c_strFilePath」に代入する値は存在を確認するファイルパスです。
6行目は FileSystemObject をオブジェクト変数「objFSO」に代入しています。このオブジェクト変数はファイルやフォルダを操作することができます。
7行目は FileSystemObject の FileExistsメソッドでファイルの存在を確認しています。カッコ内のパスのファイルが存在する時は True、存在しない時は False を返します。
FileExistsメソッドは絶対パス、相対パスの両方に対応しています。
12行目は使い終わったオブジェクト変数を解放しています。
ちなみに、このプログラムは2行目に「Sub 適当なプロシージャ名()」、プログラムの最後に「End Sub」を記述すると Excel等の VBA でも動作しますが、VBA の変数と定数は型を指定した記述が望ましいです。
3行目と4行目をVBAに対応した記述に変更すると次のようになります。
Dim objFSO As Object Dim strText As String Const c_strFilePath As String = "C:\Windows\System32\mspaint.exe"
フォルダの存在を確認する
ここではプログラムフォルダの存在を確認します。
フォルダの存在を確認する VBScript のプログラムは次のとおりです。
サンプルコード
Option Explicit Dim objFSO, strText Const c_strFolderPath = "C:\Program Files" Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(c_strFolderPath) = True Then strText = "存在します" Else strText = "存在しません" End If Set objFSO = Nothing MsgBox "フォルダ" & vbCrLf _ & c_strFolderPath & vbCrLf _ & "は" & strText
上記のコードを Windows 10 のアクセサリから開いたメモ帳へコピー&ペースト後、文字コードを「ANSI」に設定し、適当なファイル名に拡張子「.vbs」を付けてデスクトップ等に保存すると、すぐに動作確認できます。
保存した vbsファイルをダブルクリックすると、4行目の定数で指定したパスのプログラムフォルダが存在した時に「~は存在します」のメッセージが表示されます。
解説
フォルダの存在を確認するときは FileSystemObject の FolderExistsメソッドを使います。
記述方法は FileExistsメソッドとほぼ同じで、今回はカッコ内の引数がフォルダパスになっています。
このコードは変数と定数の宣言の記述を VBA仕様に変更して Excel等の VBA でも動作させることができます。
ドライブの存在を確認する
ここでは cドライブの存在を確認します。
ドライブの存在を確認する VBScript のプログラムは次のとおりです。
サンプルコード
Option Explicit Dim objFSO, strText Const c_strDriveName = "c" Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.DriveExists(c_strDriveName) = True Then strText = "存在します" Else strText = "存在しません" End If Set objFSO = Nothing MsgBox "ドライブ" & vbCrLf _ & c_strDriveName & vbCrLf _ & "は" & strText
上記のコードを Windows 10 のアクセサリから開いたメモ帳へコピー&ペースト後、文字コードを「ANSI」に設定し、適当なファイル名に拡張子「.vbs」を付けてデスクトップ等に保存すると、すぐに動作確認できます。
保存した vbsファイルをダブルクリックすると、4行目の定数で指定したドライブが存在した時に「~は存在します」のメッセージが表示されます。
解説
ドライブの存在を確認するときは FileSystemObject の DriveExistsメソッドを使います。
記述方法は FileExistsメソッドとほぼ同じで、今回はカッコ内の引数がドライブ名になっています。
このコードは変数と定数の宣言の記述を VBA仕様に変更して Excel等の VBA でも動作させることができます。
絶対パスと相対パス
パスの先頭が「c:」等のドライブ名で始まるのが絶対パス、実行プログラムのフォルダを基点にして参照するのが相対パスです。
例えば、プログラムを実行する vbsファイルと同じフォルダ内に「test.txt」というテキストファイルがあった場合、このテキストファイルの相対パスは「test.txt」となります。
まとめ
- ファイルの存在の確認は FileSystemObject の FileExistsメソッド
- フォルダの存在の確認は FileSystemObject の FolderExistsメソッド
- ドライブの存在の確認は FileSystemObject の DriveExistsメソッド
- FileExistsメソッドと FolderExistsメソッドは絶対パス、相対パスの両方に対応している
ありがとうございました。
コメント