3.2 フォルダの中を探る
 フォルダに入っているファイルやフォルダの情報を得るときの方法です。シェルアプリケーションオブジェクトを使って行います。
使用例
 フォルダに入っているファイルやフォルダの情報を得る例です。コマンドプロンプトのDirコマンドと似たようなことをします。例は、c:\happyというフォルダに入っているファイルやフォルダの一覧を表示するプログラムです。一覧を表示するとき、ファイル名の他にサイズ(ファイルのとき)と最終更新日時を表示しています。

 何はともあれ、まずは探りを入れたフォルダのフォルダオブジェクトを作らねばなりません。これは、シェルアプリケーションオブジェクトのNameSpaceというメソッドで行い(A)、パラメタにはもちろん探りを入れたりフォルダのフルパスを指定します。

 フォルダオブジェクトを作ったら、アイテムオブジェクトを、フォルダオブジェクトのItemsメソッドを使って作ります(B)。これで、そのフォルダに入っているファイルやフォルダ全ての情報が取得できました。

 次はいよいよ探りを入れる部分ですが、まずは何個入っていたかを知る必要がありますね。アイテムオブジェクトCountプロパティを見れば、いとも簡単にバレちゃいます。ちなみに、総数から1を引いた数を総数(objFolderItems.Count-1)としていますが、とりあえずは置いといて…

 フォルダアイテムオブジェクトからファイルやフォルダの情報であるアイテムオブジェクトを取り出すには、Itemメソッドを使います(D)。パラメタには0から始まる番号を指定します。例えば、アイテムが10コるときは0〜9の範囲で指定します。For文の所でobjFolderItems.Count-1としていたのはそのためです。

 アイテムを取り出したら、そのアイテムがフォルダであるかファイルであるかを判断しましょう(E)。アイテムオブジェクトIsFolderTrueならそのアイテムはフォルダ、Falseならファイルです。

 そして情報の表示(FまたはG)です。各情報は、アイテムオブジェクトからファイル(フォルダ)名はNameプロパティで、サイズ(ただしファイルの場合)はSizeプロパティで、最終更新日時はModifyDateプロパティで取得できます。フォルダの場合は、フォルダと分かるように先頭にDを入れてみました。

 ■VBScriptの記述例
Option Explicit

Dim objApl
Dim objFolder
Dim objFolderItems
Dim objItem
Dim i

'@シェルアプリケーションオブジェクトを作成します
Set objApl = CreateObject("Shell.Application")

'A探りを入れたいフォルダのオブジェクトを作成します
Set objFolder = objApl.NameSpace("C:\happy")

'Bフォルダオブジェクトから、入っているファイルやフォルダの全情報を取得します
Set objFolderItems = objFolder.Items()

'C何個入っていたかは、Countで参照
For i=0 To objFolderItems.Count-1

    'Dファイルやフォルダの情報を1コ取り出します
    Set objItem = objFolderItems.Item(i)

    'E取り出した物がファイルかフォルダかを判定
    If objItem.IsFolder = True Then
       'F取り出した物がフォルダの場合のメッセージ
       WScript.Echo "D " & objItem.Name & "  ModifyDate:" & objItem.ModifyDate
    Else
       'G取り出した物がファイルの場合のメッセージ
       WScript.Echo "  " & objItem.Name & _
                    "  Size:" & objItem.Size & "Bytes  ModifyDate:" & objItem.ModifyDate
    End If

Next

Set objItem = Nothing
Set objFolderItems = Nothing
Set objFolder = Nothing
Set objApl = Nothing

 ■JScript(JavaScript)の記述例
var objApl;
var objFolder;
var objFolderItems;
var objItem;
var i;

//@シェルアプリケーションオブジェクトを作成します
objApl = new ActiveXObject("Shell.Application");

//A探りを入れたいフォルダのオブジェクトを作成します
objFolder = objApl.NameSpace("c:\\happy");

//Bフォルダオブジェクトから、入っているファイルやフォルダの全情報を取得します
objFolderItems = objFolder.Items();

//C何個入っていたかは、Countで参照
for(i=0;i<objFolderItems.Count;i++) {

    //Dファイルやフォルダの情報を1コ取り出します
    objItem = objFolderItems.Item(i);

    //E取り出した物がファイルかフォルダかを判定
    if (objItem.IsFolder==true) {
       //F取り出した物がフォルダの場合のメッセージ
       WScript.echo("D " + objItem.Name + " ModifyDate:" + objItem.ModifyDate);
    } else {
       //G取り出した物がファイルの場合のメッセージ
       WScript.echo(" " + objItem.Name +
                    " Size:" + objItem.Size + "Bytes ModifyDate:" + objItem.ModifyDate);
    }

}

objItem = null
objFolderItems = null
objFolder = null
objApl = null
Copyright(C) 1999-2006 結城圭介。 All rights reserved