WSH  WSH2  掲示板  JavaScript,Neo-Generation  DOM  download  表紙
23. ShellWindows  25.FolderItem
Windows Scripting Host 24
Folder

Folder オブジェクトによりフォルダを操作することができます。

Folderオブジェクトを得る

FolderオブジェクトはShellオブジェクトの NameSpaceメソッドで得られます。
objFolder = Shell.NameSpace(vDir);
vDirShellオブジェクトOpenメソッドなどと同様です。
また、復習になりますが、BrowseForFolderメソッドでも 得られます。

Folderの情報を得る

Titleプロパティでフォルダのタイトルを得ることができます。
ParentFolderプロパティでは 親のFolderオブジェクトを得ることができます。
scripts/fldtitle.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var objFolder = Shell.NameSpace(3);
WScript.Echo(objFolder.Title);
var objFolder2 = objFolder.ParentFolder;
WScript.Echo(objFolder2.Title);
NameSpaceの引数は3になっていますが、 これはコントロールパネルを表します。 Titleプロパティは"コントロール パネル"となります。 要するにエクスプローラの表示になるんですね。
ParentFolderは"マイ コンピュータ"を表します。 ここもエクスプローラのツリーを反映しています。

Itemsメソッドで フォルダの中のアイテムを列挙することができます。
まず、Itemsメソッドで FolderItemsオブジェクトを得て、 FolderItemsオブジェクトの Itemメソッドで フォルダの中の一つ一つのFolderItemオブジェクトを得ます。

scripts/flditems.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var objFolder = Shell.NameSpace(0);     //デスクトップ
var objFolderItems = objFolder.Items();
for(var i = 0; i < objFolderItems.Count; i++)
    WScript.Echo(objFolderItems.Item(i).Name);
FolderItemオブジェクトの Nameプロパティで アイテムの名前を得ることができるので、 デスクトップの下のアイテムの名前を列挙することになります。
FolderItemオブジェクトについては 次のページで詳しく述べています。

GetDetailsOfで 個々のアイテムの詳細な情報を得ることができます。

objFolder.GetDetailsOf(vItem, iColumn);
vItemFolderItemオブジェクトを表します。 iColumnに応じて返す情報が以下のように変わります。

iCound説明
0オブジェクトの名前
1オブジェクトのサイズ
2オブジェクトの種類
3オブジェクトの更新日時
4オブジェクトの属性
-1オブジェクトの説明

0だと上のスクリプトと同じことになります。

scripts/getdetailsof.js
--------------------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var objFolder = Shell.NameSpace(0);
var objFolderItems = objFolder.Items();
for(var i = 0; i < objFolderItems.Count; i++)
    WScript.Echo(objFolder.GetDetailsOf(objFolderItems.Item(i), 0));
-1のときだけは意味があるのかな。

ParseNameメソッドで 名前がわかっているアイテムに対応する FolderItemオブジェクトを得ることができます。

objFolder.ParseName(bName);
bNameはアイテムの名前です。
scripts/parsename.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var c_root = Shell.NameSpace("c:\\");
WScript.Echo(c_root.Title);
var a = c_root.ParseName("autoexec.bak");        //FolderItemオブジェクト
WScript.Echo(a.Name);
フォルダを操作する

CopyHereメソッドで アイテムをそのフォルダにコピーすることができます。
objFolder.CopyHere vItem, [vOptions]
vItemFolderItemオブジェクトか FolderItemsオブジェクトかアイテムの名前です。
scripts/copyhere1.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var desktop = Shell.NameSpace(0);
var fSendTo = Shell.NameSpace("c:\\windows\\SendTo");
var item1 = fSendTo.Items().Item(0);
desktop.CopyHere(item1);     //FolderItemオブジェクト
scripts/copyhere2.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var desktop = Shell.NameSpace(0);
var fSendTo = Shell.NameSpace("c:\\windows\\SendTo");
var items1 = fSendTo.Items();
desktop.CopyHere(items1);    //FolderItemsオブジェクト
scripts/copyhere3.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var desktop = Shell.NameSpace(0);
desktop.CopyHere("c:\\autoexec.bat");    //名前
vOptionsは次の表のFlagの組合せです。

Flag説明
FOF_ALLOWUNDO0x0040Undoが有効
FOF_NOCONFIRMATION0x0010 上書きしますかとか聞いてこなくなる
FOF_NO_CONNECTED_ELEMENTS0x2000
FOF_NOCOPYSECURITYATTRIBS0x0800
FOF_NOERRORUI0x0400エラーを表示しない
FOF_NORECURSION0x1000 再帰的なディレクトリの処理はしない
FOF_RENAMEONCOLLISION0x0008 同じ名前があったら名前を付け替える
FOF_SILENT0x0004進度を表す表示がない
FOF_SIMPLEPROGRESS0x0100 進度を表す表示でファイル名を省略

まだ調べることができていない項目については説明を省いています。 また、関係なさそうな定数は消去しています。

scripts/copyhere4.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var desktop = Shell.NameSpace(0);
desktop.CopyHere("c:\\Program Files", 0x1040);
上の場合はFOF_ALLOWUNDOFOF_NORECURSIONのフラグが立っているので、 デスクトップに"Program Files"というフォルダだけコピーされます。 また、Undo(Ctrl+Z)は有効です。
vOptionsが省略された場合、または、0の場合は、 FOF_ALLOWUNDOが立っているようです。

MoveHereメソッドで アイテムをそのフォルダに移動することができます。

objFolder.MoveHere vItem, [vOptions]
vItemvOptionsCopyHereと同じです。
scripts/movehere.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var desktop = Shell.NameSpace(0);
desktop.MoveHere("c:\\autoexec.bak");
NewFolderメソッドで そのフォルダに新しいフォルダを作ることができます。
objFolder.NewFolder bName, [vOptions]
bNameは新しいフォルダの名前です。 vOptionsは今は使われていないそうです。
scripts/newfolder.js
------------------------------------------------------
var Shell = WScript.CreateObject("Shell.Application");
var favorites = Shell.NameSpace(6);     //お気に入り
favorites.NewFolder("天気予報でございます");
これってデスクトップ(NameSpace(0))だとうまくいかないんですね。


first, prev, next, noframe, exit
Written 8/21/01