var Shell = WScript.CreateObject("Shell.Application");
var objFolder = Shell.NameSpace("C:\\"); //Folderオブジェクト
var objFolderItems = objFolder.Items(); //FolderItemsコレクション
for(var i = 0; i < objFolderItems.Count; i++)
var ofitem = objFolderItems.Item(i); //FolderItemオブジェクト
scripts/flditem1.js ------------------------------------------------------------- var Shell = WScript.CreateObject("Shell.Application"); var objFolder = Shell.NameSpace(0); //デスクトップ var objFolderItems = objFolder.Items(); for(var i = 0; i < objFolderItems.Count; i++) { var ofitem = objFolderItems.Item(i); WScript.Echo("Name : " + ofitem.Name); //名前 WScript.Echo("Path : " + ofitem.Path); //パス WScript.Echo("Size : " + ofitem.Size); //大きさ WScript.Echo("Type : " + ofitem.Type); //種類 //更新日時 WScript.Echo("ModifyDate : " + ofitem.ModifyDate + "\n"); }フォルダのサイズは常に0のようですね。
scripts/modifydate.vbs ----------------------------------------------------- Set Shell = WScript.CreateObject("Shell.Application") Set objFolder = Shell.NameSpace(0) Set objFolderItems = objFolder.Items For Each ofitem In objFolderItems WScript.Echo Day(ofitem.ModifyDate) '日付 Next次の例のようにIs付きプロパティで FolderItemの性質を判別することができます。
scripts/flditem2.js ------------------------------------------------------------- var Shell = WScript.CreateObject("Shell.Application"); var objFolder = Shell.NameSpace(0); var objFolderItems = objFolder.Items(); for(var i = 0; i < objFolderItems.Count; i++) { var ofitem = objFolderItems.Item(i); if(ofitem.Name == "ごみ箱") { WScript.Echo("" + ofitem.IsBrowsable); //参照できるか WScript.Echo("" + ofitem.IsFileSystem); //FileSystemの一部か WScript.Echo("" + ofitem.IsFolder); //フォルダか WScript.Echo("" + ofitem.IsLink); //ショートカットか } }ちなみにごみ箱では上から順にfalse, false, true, falseです。
ショートカットならGetLinkプロパティで IShellLinkDualオブジェクトを得ることができます。 このTargetプロパティでリンク先の FolderItemオブジェクトを得ます。
scripts/getlink.js ------------------------------------------------------------- var Shell = WScript.CreateObject("Shell.Application"); var objFolder = Shell.NameSpace(11); //スタートメニュー var objFolderItems = objFolder.Items(); for(var i = 0; i < objFolderItems.Count; i++) { var ofitem = objFolderItems.Item(i); if(ofitem.IsLink) { //ショートカットなら var olink = ofitem.GetLink; var otargetitem = olink.Target; WScript.Echo(ofitem.Name + " -> " + otargetitem.Path); } }フォルダならGetFolderプロパティでFolderオブジェクトを得ることができます。
scripts/update.js ---------------------------------------------------------------- var Now = (new Date()).getTime(); var Shell = WScript.CreateObject("Shell.Application"); var objFolder = Shell.NameSpace("C:\\"); ScanFolder(objFolder); function ScanFolder(objFolder) { var objFolderItems = objFolder.Items(); for(var i = 0; i < objFolderItems.Count; i++) { var ofitem = objFolderItems.Item(i); if(ofitem.IsFolder) ScanFolder(ofitem.GetFolder); //24時間しか経っていないアイテムを出力する if(Now - (new Date(ofitem.ModifyDate)).getTime() <= 24 * 60 * 60000) WScript.Echo(ofitem.ModifyDate + " " + ofitem.Path); } }上のスクリプトはCドライブの24時間以内に更新されたファイルを列挙します。 これをFileSystemObjectを使ったときと比べてみましょう。
scripts/update2.js ---------------------------------------------------------------- var Now = (new Date()).getTime(); var fs = WScript.CreateObject("Scripting.FileSystemObject"); var f = fs.GetFolder("C:\\"); ScanFolder(f) function ScanFolder(f) { var fc = new Enumerator(f.SubFolders); for(; !fc.atEnd(); fc.moveNext()) { var ofolder = fc.item(); ScanFolder(ofolder); if(Now - (new Date(ofolder.DateLastModified)).getTime() <= 24 * 60 * 60000) WScript.Echo(ofolder.DateLastModified + " " + ofolder.Path); } var fic = new Enumerator(f.Files); for(; !fic.atEnd(); fic.moveNext()) { var ofile = fic.item(); if(Now - (new Date(ofile.DateLastModified)).getTime() <= 24 * 60 * 60000) WScript.Echo(ofile.DateLastModified + " " + ofile.Path); } }Folderオブジェクトを使ったときのほうが Temporary Internet Filesのスキャンがかなり速いですね。 でもその他は遅いような。
objFolderItem.InvokeVerb vVerb
vVerbは後述するコマンドを表す文字列です。scripts/invokeverb.js ------------------------------------------------------ var oTrash = GetTrash(); oTrash.InvokeVerb("開く(&O)"); function GetTrash() { var Shell = WScript.CreateObject("Shell.Application"); var objFolder = Shell.NameSpace(0); var objFolderItems = objFolder.Items(); for(var i = 0; i < objFolderItems.Count; i++) { var ofitem = objFolderItems.Item(i); if(ofitem.Name == "ごみ箱") return ofitem; } return null; }vVerbは次のように FolderItemVerbオブジェクトの Nameプロパティから得られます。
scripts/verbs.js ------------------------------------- var oTrash = GetTrash(); var oVerbs = oTrash.Verbs(); for(var i = 0; i < oVerbs.Count; i++) WScript.Echo(oVerbs.Item(i).Name); //以下略上のスクリプトはごみ箱に対して使えるvVerbを列挙しているのですが、 使えないvVerbもあるようですね。
scripts/verbs2.js --------------------------------------------- var oTrash = GetTrash(); var oVerbs = oTrash.Verbs(); for(var i = 0; i < oVerbs.Count; i++) { if(oVerbs.Item(i).Name.charAt(0) == "開") oVerbs.Item(i).DoIt(); } //以下略
scripts/ftp1.js ------------------------------------------------------- var oShell = WScript.CreateObject("Shell.Application"); var oFolder = oShell.NameSpace( "ftp://user:password@sitename/directory/"); var objFolderItems = oFolder.Items(); WScript.Echo(GetFolderSize(oFolder) + "Byte"); function GetFolderSize(objFolder) { //フォルダのサイズを得る var objFolderItems = objFolder.Items(); var size = 0; for(var i = 0; i < objFolderItems.Count; i++) { var ofitem = objFolderItems.Item(i); if(ofitem.IsFolder) //フォルダのとき size += GetFolderSize(ofitem.GetFolder); else //ファイルのとき size += ofitem.Size; } return size; }次は指定したディレクトリのa.txtというファイルを デスクトップにダウンロードします。
scripts/ftp2.js ------------------------------------------------------- var oShell = WScript.CreateObject("Shell.Application"); var oFolder = oShell.NameSpace( "ftp://user:password@sitename/directory/"); var objFolderItems = oFolder.Items(); var objFolderItems = oFolder.Items(); for(var i = 0; i < objFolderItems.Count; i++) { var ofitem = objFolderItems.Item(i); if(ofitem.Name == "a.txt") { oShell.NameSpace(0).CopyHere(ofitem); break; } }次はデスクトップのa.txtというファイルを 指定したディレクトリにアップロードします。
scripts/ftp3.js ------------------------------------------------------- var oShell = WScript.CreateObject("Shell.Application"); var oFolder = oShell.NameSpace( "ftp://user:password@sitename/directory/"); var desktop = oShell.NameSpace(0); var objFolderItems = desktop.Items(); for(var i = 0; i < objFolderItems.Count; i++) { var ofitem = objFolderItems.Item(i); if(ofitem.Name == "a.txt") { oFolder.CopyHere(ofitem); WScript.Sleep(6000); //いくらか待つ必要あり break; } }いずれも Shell32.dllによって(?)動かないかもしれません。 あと、最後はオプションを上書きしてもよいかを聞いてきました (Folder参照)。