目次
フォルダ内のアイテムに関する詳細を取得します。取得した文字列には制御文字が含まれる場合があるので、この関数で得られた文字列を操作するときは注意。
- 構文
- Folder.GetDetailsOf( vItem, iColumn )
- 引数
- vItem (FolderItem オブジェクト)省略可
- 情報を取得する項目。これはFolderItemオブジェクトである必要があります。
- iColumn (Variant)省略可
- 取得する情報を指定するInteger値。アイテムに利用できる情報は、アイテムが表示されているフォルダによって異なります。この値は、シェルビューに表示されるゼロベースの列番号に対応します。
- 戻り値
- iColumnに指定された情報
Folder オブジェクトを返すメソッド・プロパティ
- Shell.BrowseForFolder メソッド
- フォルダ選択のダイアログボックスを表示し、選択したフォルダのFolderオブジェクトを返す。
- Folder.GetDetailsOf メソッド
- FolderItemオブジェクトがフォルダの場合、Folder オブジェクトを返します。
関連するメソッド・プロパティ
iColumn
以下のプログラムを実行すると、指定したFolderオブジェクトで使用できるiColumnの項目を連想配列に格納します。
項目名から数値を取得できます。
HASHTBL iColumn
FOR i = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
以下のプログラムで項目名が取得できます。
Folder.GetDetailsOf(EMPTYPARAM, i)
よって連想配列に以下のようにiColumn[項目名] = 値の形式で格納されているため、項目名を指定すれば対応する値が取得できることになります。
iColumn["名前"] = 0
iColumn["サイズ"] = 1
iColumn["項目の種類"] = 2
…
名前から対応する数値を取得するには、以下のように記述します。この場合0が返ります。
iColumn["名前"]
以下は項目名から数値、数値から項目名を取得することができます。
HASHTBL iColumn
FOR i = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
FOR i = 0 TO LENGTH(iColumn)
iColumn[iColumn[i, HASH_VAL]] = iColumn[i, HASH_KEY]
NEXT
iColumn[0] = "名前"
iColumn[1] = "サイズ"
iColumn[2] = "項目の種類"
…
0に対応する項目名を取得します。この場合名前が返ります。
PRINT iColumn[0]
項目一覧
Shell.NameSpaceで引数に0〜50の値を指定したときに出てきた項目の一覧です。
1 | 35mm 焦点距離 | BCC | BCC アドレス | CC | CC アドレス | EXIF バージョン | FAX 番号 (会社) | IM アドレス | IP アドレス | ISO 速度 |
---|---|---|---|---|---|---|---|---|---|---|
2 | MAC アドレス | SAP | TTY/TTD 電話 | To do タイトル | URL | Web ページ | この回のタイトル | ほかの市区町村 | アカウント名 | アクセス日時 |
3 | アラーム時刻 | アルバム | アルバム ID | アルバム アーティストで並べ替え | アルバムで並べ替え | アルバムのアーティスト | アーカイブ日時 | イニシャル | イニシャル キー | イベント |
4 | エピソード番号 | エンコード方式 | オフラインの状態 | オンライン | カテゴリ | カメラのモデル | カメラの製造元 | クライアント ID | クラス | グループ |
5 | コメント | コレクション | コンテンツの作成日時 | コンパイルの一部 | コンピューター | コールバック番号 | サイズ | サフィックス | サブタイトル | サポートのリンク |
6 | シーズン番号 | ジャンル | ステレオ | ステーション コール サイン | ストア | スライド | セットのパート | ソース | タイトル | タイトルで並べ替え |
7 | タグ | チャンネル番号 | テレックス | ディスク | ディレクター | デザイナー/メーカー | デザイン対象 | デバイス カテゴリ | デバイス名 | データ速度 |
8 | トラック番号 | ドキュメント | ドキュメント ID | ニックネーム | ネットワークのカテゴリ | ネットワークの場所 | パス | ビット レート | ビットの深さ | ビデオの向き |
9 | ビデオ圧縮 | ビート数/分 | ファイル システム | ファイル バージョン | ファイルの所有権 | ファイルの説明 | ファイル名 | ファイル拡張子 | ファイル数 | ファミリ |
10 | フォルダー | フォルダーのパス | フォルダー名 | フォント スタイル | フォント バージョン | フォント ファイル名 | フォントの種類 | フォント埋め込み可能 | フラグの有無 | フラグの状態 |
11 | フラグの色 | フラッシュ モード | フレンドリ名 | フレーム幅 | フレーム率 | フレーム高 | プライマリ電子メール | プログラムのモード | プログラムの説明 | プログラム名 |
12 | プロジェクト | プロデューサー | ペアリング済み | ページ数 | ホスト アドレス | ホワイト バランス | ポケットベル | マスター キーワード | ミドル ネーム | メディアの作成日時 |
13 | モデル | ユーザー Web URL | ラベル | リソース | リリース日 | リンクの状態 | リンク先 | レンズ メーカー | レンズ モデル | ローカル コンピューター |
14 | ワイヤレス モード | ワークグループ | 事業部 | 人物 | 仕事の所有者 | 他の国/地域 | 他の番地 | 他の私書箱 | 他の郵便番号 | 他の都道府県 |
15 | 件名 | 任意出席者 | 任意出席者アドレス | 会社 | 会社のホーム ページ | 会社代表電話 | 会社電話 | 会話 ID | 会議の状態 | 住所 (その他) |
16 | 住所 (会社) | 住所 (自宅) | 住所 (郵送先) | 作成日時 | 作成者 | 作曲者 | 作曲者で並べ替え | 作者 | 使用率 | 使用領域 |
17 | 保護 | 保護者による制限 | 保護者による制限の理由 | 優先度 | 元の場所 | 光源 | 共同作成者 | 共有 | 共有の種類 | 共有ユーザー |
18 | 共有中 | 共有状態 | 内容の状態 | 内容の種類 | 再帰 | 再放映 | 分類 | 分類項目 | 利用可能性 | 削除 |
19 | 削除日時 | 前回保存日時 | 前回印刷日 | 勤務先所在地 | 単語数 | 参加アーティスト | 参加アーティストで並べ替え | 参加者 | 取得日時 | 受信日時 |
20 | 可用性の状態 | 合計サイズ | 名 | 名2 | 名前 | 向き | 商標 | 国/地域 | 国/地域 (会社) | 国/地域 (自宅) |
21 | 垂直方向の解像度 | 場所 | 場所ごと | 大きさ | 姓 | 子供 | 字幕 | 完了 | 完了日 | 宛先 |
22 | 対象の距離 | 局名 | 属性 | 履歴の種類 | 差出人 | 市 (会社) | 市 (自宅) | 市区町村 (郵送先) | 幅 | 年 |
23 | 彩度 | 役職 | 必須出席者 | 必須出席者アドレス | 性別 | 所有者 | 抜粋 | 指揮者 | 探索方法 | 接続 |
24 | 接続済み | 携帯電話 | 撮影日時 | 放送日 | 日付時刻 | 暗号化の状態 | 更新日時 | 最大絞り | 最終表示日 | 期間 |
25 | 期限 | 未完了 | 概要 | 氏名 | 水平方向の解像度 | 添付 | 添付ファイル | 添付ファイルの有無 | 測光モード | 焦点距離 |
26 | 状態 | 球形 | 番地 (会社) | 番地 (自宅) | 番地 (郵送先) | 発行元 | 私書箱 (会社) | 私書箱 (自宅) | 私書箱 (郵送先) | 秘密度 |
27 | 秘書の名前 | 秘書の電話 | 種類 | 空き時間情報 | 空き領域 | 終了日 | 終了済 | 経費情報 | 絞り値 | 継続時間 |
28 | 総ビット レート | 総ファイル サイズ | 総編集時間 | 職業 | 肩書き | 自動要約 | 自動車電話 | 自宅 FAX | 自宅電話 | 色 |
29 | 著作権 | 表示/非表示 | 表題2 | 製作者 | 製品バージョン | 製品名 | 製造元 | 言語 | 記念日 | 記録時間 |
30 | 評価 | 認識された種類 | 誕生日 | 説明 | 課金情報 | 趣味 | 送信元アドレス | 送信先アドレス | 送信日時 | 送信者アドレス |
31 | 送信者名 | 通常の電話 | 連絡先の名 | 進捗状況 | 部署 | 郵便番号 (会社) | 郵便番号 (自宅) | 郵便番号 (郵送先) | 都道府県 | 都道府県 (会社) |
32 | 都道府県 (自宅) | 配偶者 | 重要度 | 長さ | 開催者住所 | 開催者名 | 開始日 | 開封の状態 | 関連度 | 雰囲気 |
33 | 電子メール アドレス | 電子メール2 | 電子メール3 | 電子メールの一覧 | 電子メール表示名 | 電話番号 | 電話番号またはホスト アドレス | 露出プログラム | 露出時間 | 露出補正 |
34 | 項目の種類 | 高さ |
制御文字
GetDetailsOfメソッドで取得した文字列には制御文字が含まれていることがあります。制御文字が含まれているかどうかは文字数を出力することで確認することができます。
例えば撮影日時を取得した際の文字列2021/05/29 13:16の文字数は1文字ずつ数えていくと16文字ですが、LENGTH関数では21と出力されます。つまり21-16で5文字分の制御文字が含まれているとこがわかります。
文字列を1文字ずつASC関数で調べると以下のように8206、8207と目に見えない文字が存在していることがわかります。32は半角スペースです。
DIM datetime = Folder.GetDetailsOf(FolderItem, iColumn["撮影日時"])
PRINT datetime
PRINT LENGTH(datetime)
PRINT
FOR i = 1 TO LENGTH(datetime)
DIM s = COPY(datetime, i, 1)
PRINT s + "<#TAB>" + ASC(s)
NEXT
- 結果
2021/05/29 13:16 21 8206 2 50 0 48 2 50 1 49 / 47 8206 0 48 5 53 / 47 8206 2 50 9 57 32 8207 8206 1 49 3 51 : 58 1 49 6 54
文字列から制御文字を取り除くためには、以下のようにREPLACE関数で置換します。配列には削除したい制御文字を格納。
DIM array[] = CHR(8206), CHR(8207)
FOR item IN array
str = REPLACE(str, item, "")
NEXT
プログラム実行例
写真の撮影日時毎に枚数を取得
選択したフォルダにある写真の撮影日時を取得・カウントします。
DIM Shell = CREATEOLEOBJ("Shell.Application")
Folder = Shell.BrowseForFolder(0, "フォルダを選択してください。", 0)
HASHTBL iColumn
FOR i = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
HASHTBL dates
FOR i = 0 TO Folder.Items.Count - 1
FUKIDASI(i + "/" + Folder.Items.Count)
DIM FolderItem = Folder.Items.Item(i)
DIM datetime = Folder.GetDetailsOf(FolderItem, iColumn["撮影日時"])
IFB datetime = "" THEN
dates["0000/00/00"] = dates["0000/00/00"] + 1
ELSE
deleteControlCharacter(datetime)
DIM date = text(datevalue(datetime), "yyyy/mm/dd")
dates[date] = dates[date] + 1
ENDIF
NEXT
FOR i = 0 TO LENGTH(dates) - 1
PRINT dates[i, HASH_KEY] + "<#TAB>" + dates[i, HASH_VAL]
NEXT
// 制御文字を削除する
FUNCTION deleteControlCharacter(Var str)
DIM array[] = CHR(8206), CHR(8207)
FOR item IN array
str = REPLACE(str, item, "")
NEXT
RESULT = str
FEND
2021/05/29 2
2021/06/01 2
2021/06/02 5
2021/06/03 2
2021/06/04 16
0000/00/00 6
プロパティの項目を取得
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = "C:\Users\akita\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk"
DIM Folder = Shell.NameSpace(FSO.GetParentFolderName(path))
HASHTBL iColumn
FOR i = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
FOR i = 0 TO LENGTH(iColumn)
iColumn[iColumn[i, HASH_VAL]] = iColumn[i, HASH_KEY]
NEXT
DIM FolderItem = Folder.ParseName(FSO.GetFileName(path))
DIM array[] = "名前", "項目の種類", "ファイルの説明", "フォルダーのパス", "サイズ", "作成日時", "更新日時", "アクセス日時", "属性"
FOR i = 0 TO UBound(array)
PRINT array[i] + ","+ Folder.GetDetailsOf(FolderItem, iColumn[array[i]])
NEXT
名前, Internet Explorer
項目の種類, ショートカット
ファイルの説明,
フォルダーのパス, C:\ユーザー\akita\AppData\Roaming\Microsoft\Windows\スタート メニュー\プログラム\Windows アクセサリ
サイズ, 1.31 KB
作成日時, 2021/02/04 12:46
更新日時, 2022/05/18 02:24
アクセス日時, 2023/04/24 00:29
属性, A
デスクトップのファイル一覧
CONST ssfDESKTOP = 0
HASHTBL iColumn
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDESKTOP)
DIM FolderItems = Folder.Items
FOR n = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT
FOR n = 0 TO FolderItems.Count - 1
DIM FolderItem = FolderItems.Item(n)
WITH FolderItem
PRINT .Name
PRINT .Size + " Byte"
PRINT .Type
ENDWITH
PRINT "-----"
NEXT
フォルダ内のファイルを更新日時でソートする
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("C:\Program Files (x86)\UWSC")
DIM FolderItems = Folder.Items
HASHTBL iColumn
FOR i = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
DIM filename[-1]
DIM datetime[-1]
FOR i = 0 TO FolderItems.Count - 1
DIM FolderItem = FolderItems.Item(i)
IF FolderItem.isFolder THEN CONTINUE
arrayPush(filename, Folder.GetDetailsOf(FolderItem,iColumn["名前"]))
arrayPush(datetime, Folder.GetDetailsOf(FolderItem, iColumn["更新日時"]))
NEXT
QSORT(datetime, QSRT_NATURALA, filename)
FOR i = 0 TO UBound(filename)
PRINT filename[i] + "<#TAB>" + datetime[i]
NEXT
UDebug.chm 2014/05/11 1:58
RecIE.chm 2014/05/11 1:58
Uws2Exe.chm 2015/08/13 16:12
RecUws.dll 2016/03/25 4:57
UWSC.exe 2016/10/15 13:33
Uws2Exe.exe 2016/10/15 13:34
RecIE.exe 2016/10/15 13:35
UDebug.exe 2016/10/15 13:37
XRef.exe 2016/10/15 13:38
Readme.txt 2016/10/15 13:39
uwsc.chm 2016/10/15 13:41
unins000.exe 2018/06/27 12:48
unins000.dat 2018/06/27 12:49
写真を撮影日時毎にフォルダ分けする
CONST ssfMYPICTURES = 39
DIM Folder[1]
DIM folderspec[1]
DIM Shell = CREATEOLEOBJ("Shell.Application")
folderspec[0] = "D:\Pictures\100ANDRO\"
Folder[0] = Shell.NameSpace(folderspec[0])
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
HASHTBL iColumn
FOR i = 0 TO 350
iColumn[Folder[0].GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
DIM destination[-1]
DIM path[-1]
DIM cnt = Folder[0].Items.Count - 1
FOR i = cnt TO 0 STEP -1
FUKIDASI(i + "/" + cnt)
DIM FolderItem = Folder[0].Items.Item(i)
IF FolderItem.isFolder THEN CONTINUE
DIM filename = FolderItem.Name
DIM datetime = deleteControlCharacter(Folder[0].GetDetailsOf(FolderItem, iColumn["撮影日時"]))
PRINT filename
PRINT datetime
PRINT "-----"
TRY
DIM date = text(dateValue(datetime), "yyyy-mm-dd")
EXCEPT
date = "0000-00-00"
ENDTRY
folderspec[1] = FSO.BuildPath(folderspec[0], date)
Folder[1] = Shell.NameSpace(folderspec[1])
arrayPush(destination, folderspec[1])
arrayPush(path, FolderItem.Path)
NEXT
FOR i = 0 TO UBound(destination)
IF !FSO.FolderExists(destination[i]) THEN CreateFolders(destination[i])
Folders = Shell.NameSpace(destination[i])
Folders.MoveHere(path[i])
NEXT
FUNCTION deleteControlCharacter(str)
DIM array[] = CHR(8206), CHR(8207)
FOR item IN array
str = REPLACE(str, item, "")
NEXT
RESULT = str
FEND
フォルダ内の音声ファイルをすべて再生
HASHTBL iColumn
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("C:\Windows\Media")
FOR i = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
DIM FolderItems = Folder.Items
DIM extensions[] = ".wav", ".mid", ".avi", ".mp3"
FOR FolderItem IN FolderItems
DIM path = FolderItem.Path
IF inArray(Folder.GetDetailsOf(FolderItem, iColumn["ファイル拡張子"]), extensions) = FALSE THEN CONTINUE
FUKIDASI(path)
SOUND(path, TRUE)
NEXT
指定フォルダ内の曲をトラック番号順で再生
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM folderspec = "F:\Music\sample"
DIM Folder = Shell.NameSpace(folderspec)
DIM FolderItems = Folder.Items
HASHTBL iColumn
FOR i = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
DIM filename[-1]
DIM track[-1]
FOR i = 0 TO FolderItems.Count - 1
DIM FolderItem = FolderItems.Item(i)
IF FolderItem.isFolder THEN CONTINUE
IF Folder.GetDetailsOf(FolderItem, iColumn["ファイル拡張子"]) <> ".wav" THEN CONTINUE
arrayPush(filename, Folder.GetDetailsOf(FolderItem,iColumn["名前"]))
arrayPush(track, Folder.GetDetailsOf(FolderItem, iColumn["トラック番号"]))
NEXT
QSORT(track, QSRT_NATURALA, filename)
FOR i = 0 TO UBound(filename)
DIM path = folderspec + "\" + filename[i]
FUKIDASI(filename[i])
SOUND(path, TRUE)
NEXT
デフォルトプリンターを取得
CONST ssfPRINTERS = 4
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfPRINTERS)
DIM FolderItems = Folder.Items
HASHTBL iColumn
FOR n = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT
FOR n = 0 TO FolderItems.Count - 1
DIM FolderItem = FolderItems.Item(n)
DIM PrinterName = Folder.GetDetailsOf(FolderItem, iColumn["名前"])
FOR i = 0 TO FolderItem.Verbs.Count - 1
IF POS("通常使うプリンターに設定", FolderItem.Verbs.Item(i).Name) <> 0 THEN CONTINUE 2
NEXT
PRINT PrinterName
BREAK
NEXT
Brother DCP-J963N Printer
指定したフォルダの曲名と合計時間を出力
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM Excel = CREATEOLEOBJ("Excel.Application")
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("D:\Music\Hey! Say! JUMP\COSMIC☆HUMAN")
DIM serial
HASHTBL iColumn
FOR n = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT
FOR n = 0 TO Folder.Items.Count - 1
WITH Folder
DIM FolderItem = .Items.Item(n)
PRINT .GetDetailsOf(FolderItem, iColumn["名前"])
serial = serial + timeValue(.GetDetailsOf(FolderItem, iColumn["長さ"]))
ENDWITH
NEXT
PRINT "----------"
PRINT "合計時間<#TAB>" + text(serial, "h:m:s")
01 COSMIC☆HUMAN.wav
02 SWEET or HOT?.wav
03 ルーレット.wav
04 Draw My Life!.wav
05 COSMIC☆HUMAN (オリジナル・カラオケ).wav
06 SWEET or HOT- (オリジナル・カラオケ).wav
07 ルーレット (オリジナル・カラオケ).wav
08 Draw My Life! (オリジナル・カラオケ).wav
----------
合計時間 00:34:16
指定したフォルダの動画の合計時間を求める
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("D:\Videos\")
DIM FolderItems = Folder.Items
DIM serial
HASHTBL iColumn
FOR n = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT
FOR n = 0 TO FolderItems.Count - 1
WITH Folder
DIM FolderItem = .Items.Item(n)
extension = .GetDetailsOf(FolderItem, iColumn["ファイル拡張子"])
IFB FolderItem.IsFolder = FALSE THEN
serial = serial + timeValue(.GetDetailsOf(FolderItem, iColumn["長さ"]))
ENDIF
ENDWITH
NEXT
PRINT text(serial, "hh:mm:ss")
09:24:43
関連記事
- Shell.Explore メソッド
- 指定したディレクトリをエクスプローラで開きます。
- Folder オブジェクト
- シェルフォルダを表します。
- Folder.CopyHere メソッド (Shell)
- 1つまたは複数のアイテムをフォルダにコピーします。
- Folder.MoveHere メソッド (Shell)
- 1つまたは複数のアイテムをこのフォルダに移動します。
- Folder.ParseName メソッド (Shell)
- 指定されたアイテムのFolderItem オブジェクトを作成して返します。
- Folder.ParentFolder プロパティ (Shell)
- 指定したフォルダの親のFolder オブジェクトを返します。
- FileSystemObject オブジェクト
- Folder オブジェクト
- Folder オブジェクト
- フォルダのすべてのプロパティにアクセスできます。
- Folder.Drive プロパティ (FSO)
- 指定したフォルダがあるドライブのドライブ文字を返します。